Configuring the Demos, Bootloaders and Projects

If the target AVR model, clock speed, board or other settings are different from the current settings, they must be changed and the project recompiled from the source code before being programmed into the AVR microcontroller. Most project configuration options are located in the "makefile" build script inside each LUFA application's folder, however some demo or application-specific configuration settings (such as the output format in the AudioOut demo) are located in one or more of the source files of the project. See each project's individual documentation for application-specific configuration values.

Each project "makefile" contains all the script and configuration data required to compile each project. When opened with any regular basic text editor such as Notepad or WordPad (ensure that the save format is a pure ASCII text format) the build configuration settings may be altered.

Inside each makefile, a number of configuration variables are located, with the format "<VARIABLE NAME> = <VALUE>". For each application, the important variables which should be altered are:

These values should be changed to reflect the build hardware.

The MCU Parameter

This parameter indicates the target AVR model for the compiled application. This should be set to the model of the target AVR (such as the AT90USB1287, or the ATMEGA32U4), in all lower-case (e.g. "at90usb1287"). Note that not all demos support all the USB AVR models, as they may make use of peripherals or modes only present in some devices.

For supported processor models, see Device and Hardware Support.

The BOARD Parameter

This parameter indicates the target AVR board hardware for the compiled application. Some LUFA library drivers are board-specific, such as the LED driver, and the library needs to know the layout of the target board. If you are using one of the board models listed on the main library page, change this parameter to the board name in all UPPER-case.

If you are not using any board-specific drivers in the LUFA library, or you are using a custom board layout, change this to read "USER" (no quotes) instead of a standard board name. If the USER board type is selected and the application makes use of one or more board-specific hardware drivers inside the LUFA library, then the appropriate stub drives files should be copied from the /BoardStubs/ directory into a /Board/ folder inside the application directory, and the stub driver completed with the appropriate code to drive the custom board's hardware.

For boards with built in hardware driver support within the LUFA library, see Device and Hardware Support.

The F_CLOCK Parameter

This parameter indicates the target AVR's input clock frequency, in Hz. This is the actual clock input, before any prescaling is performed. In the USB AVR architecture, the input clock before any prescaling is fed directly to the PLL subsystem, and thus the PLL is derived directly from the clock input. The PLL then feeds the USB and other sections of the AVR with the correct upscaled frequencies required for those sections to function.

Note that this value does not actually *alter* the AVR's input clock frequency, it is just a way to indicate to the library the clock frequency of the AVR as set by the AVR's fuses. If this value does not reflect the actual running frequency of the AVR, incorrect operation of one of more library components will occur.

The F_CPU Parameter

This parameter indicates the target AVR's master CPU clock frequency, in Hz.

Note that this value does not actually *alter* the AVR's CPU clock frequency, it is just a way to indicate to the library the clock frequency of the AVR core as set by the AVR's fuses. If this value does not reflect the actual running frequency of the AVR, incorrect operation of one of more library components will occur.

The CDEFS Parameter

Many applications have features which can be controlled by the defining of specially named preprocessor tokens at the point of compilation - for example, an application might use a compile time token to turn on or off optional or mutually exclusive portions of code. Preprocessor tokens can be defined here by listing each one with the -D command line switch, and each token can optionally be defined to a specific value. When defined in the project makefile, these behave as if they were defined in every source file via a normal preprocessor define statement.

Most applications will actually have multiple CDEF lines, which are concatenated together with the "+=" operator. This ensures that large numbers of configuration options remain readable by splitting up groups of options into separate lines.

The LUFA_PATH Parameter

As each LUFA program requires the LUFA library source code to compile correctly, the application must know where the LUFA library is located. This value specifies the path to the LUFA library base relative to the path of the project makefile.

The LUFA_OPTS Parameter

This value is similar to the CDEFS parameter listed elsewhere -- indeed, it is simply a convenient place to group LUFA related tokens away from the application's compile time tokens. Normally, these options do not need to be altered to allow an application to compile and run correctly on a different board or AVR to the current configuration - if the options are incorrect, then the demo is most likely incompatible with the chosen USB AVR model and cannot be made to function through the altering of the makefile settings alone (or at all). Settings such as the USB mode (device, host or both), the USB interface speed (Low or Full speed) and other LUFA configuration options can be set here - see Summary of Compile Tokens documentation for details on the available LUFA compile time configuration options.