1 Introduction and Objectives of Foundation Services
Foundation Services is a collection of software components such as peripheral drivers, middleware, and software applications (examples) provided by Microchip. The framework supports the Microchip's 8- and 16- bit PIC, as well as AVR families of microcontrollers.
Foundation Services is designed to work together with either MPLABX Code Configurator (MCC)or MCC configuration tools. Currently 8- and 16-bit PIC MCUs are configured through MCC, while AVR MCUs are supported through MCC. In either case, the user is able to configure code according to their needs. The resulting configuration is then input to a code generator, resulting in optimal code implementing exactly the functionality configured by the user. The generated C-code is exported then further developed and compiled in the associated Integrated Development Environment.
The tight integration with configuration tools means that the Foundation Services code is tailored to the users' specification. For instance, instead of using C preprocessor conditional expressions to enabled/disable code blocks, disabled code blocks can be entirely removed from the project source, which results in cleaner and easier to read code. The integration into configuration tool means that software configuration is done in a much more user-friendly environment and the only configuration information loaded on the device is the raw peripheral register content, which makes the firmware image much more compact.
Foundation Services offers many benefits to the user:
- Common set of software interfaces across different devices
- Simple application code portability between supported MCU's
- Small code size
- Easy to use
Common set of software interfaces across different devices
Foundation Services offers drivers with fully hardware-abstracted interfaces. These interfaces are use-case driven and support only a subset of the functionality offered by the hardware. One hardware module is typically supported by multiple interfaces, and START is used to select which interfaces to be included in his project.
Providing common interfaces that are completely abstracted from the hardware makes them easier to use in middleware and software stacks since it is not necessary to add architecture specific code.
Simple application code portability between supported MCU's
Foundation Services libraries are libraries that work with and are dependent on Foundation Services drivers.
Foundation Services driver's will have the same interface (i.e. the same set of functions) between suppored devices.
Therefore even if register level code within driver functions, is unique and optimized for that device, any application level code written using these driver- and library-fucntions, is easily portable between supported devices.
Small code size
Having START generate the code exactly matching the required configuration reduces the code size to a minimum. Full featured and generic drivers make it hard for the driver developer to make optimal decisions for often mutually exclusive design parameters, such as like high speed, low power, low code size, ease of use, and advanced feature support. Such drivers often miss the target in many applications because some of the parameters are wrongly tuned for the application in mind. However, limiting the scope of the driver to a specific use-case, Foundation Services drivers are able to get the balance between these parameters right.
Use-case drivers limit the driver functionality to the functionality required by the user, which usually is a subset of the full functionality provided by the peripheral.
Easy to use
Foundation Services is easy to use due to:
- Graphical configuration of the system through Atmel START
- Use-case drivers offering only the functionality required by the user's application, reducing the configuration complexity compared to full-featured generic drivers. Foundation Services provides multiple use-case drivers for each peripheral, each with a specific application target.