aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/DoxygenPages/ConfiguringApps.txt
blob: 15b660e9273ba3500738fc9744622ac3f3d4209c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/** \file
 *
 *  This file contains special DoxyGen information for the generation of the main page and other special
 *  documentation pages. It is not a project source file.
 */

/** \page Page_ConfiguringApps Configuring the Demos, Bootloaders and Projects
 *
 *  If the target microcontroller model, architecture, 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 microcontroller.
 *  Most project configuration options are located in the <tt>makefile</tt> build script inside each LUFA application's folder,
 *  however some demo or application-specific configuration settings 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.
 *
 *  \see \ref Page_BuildSystem for information on the LUFA build system.
 *
 *  \section Sec_ConfiguringApps_AppMakefileParams The Default Application Makefile Template
 *
 *  Below is a copy of the default LUFA application makefile, which can be used as a template for each application.
 *
 *  \verbinclude makefile_template
 *
 *  Inside each makefile, a number of configuration variables are listed with the syntax "<VARIABLE NAME> = <VALUE>". For
 *  each application, the important standard variables which should be altered are:
 *
 *    - <b>MCU</b>, the target processor model
 *    - <b>ARCH</b>, the target microcontroller architecture
 *    - <b>BOARD</b>, the target board hardware
 *    - <b>F_CPU</b>, the target CPU master clock frequency, after any prescaling
 *    - <b>F_USB</b>, the target raw input clock to the USB module of the processor
 *    - <b>OPTIMIZATION</b>, the level of optimization to compile with
 *    - <b>TARGET</b>, the name of the target output binary and other files
 *    - <b>SRC</b>, the list of source files to compile/assemble/link
 *    - <b>LUFA_PATH</b>, the path to the LUFA library core source code
 *    - <b>CC_FLAGS</b>, the common command line flags to pass to the C/C++ compiler, assembler and linker
 *    - <b>LD_FLAGS</b>, the command line flags to pass to the linker
 *
 *  These values should be changed to reflect the build hardware.
 *
 *  \subsection SSec_ConfiguringApps_MCU The MCU Parameter
 *  This parameter indicates the target microcontroller model for the compiled application. This should be set to the model of the target
 *  microcontroller (such as the AT90USB1287, or the ATMEGA32U4), in all lower-case (e.g. "at90usb1287"). Note that not all demos support all the
 *  microcontroller models and architectures, as they may make use of peripherals or modes only present in some devices.
 *
 *  For supported processor models, see \ref Page_DeviceSupport.
 *
 *  \subsection SSec_ConfiguringApps_ARCH The ARCH Parameter
 *  This parameter indicates the target microcontroller architecture the library is to be compiled for. Different microcontroller
 *  architectures require different source files to be compiled into the final binary, and so this option must be set to the correct
 *  architecture for the selected platform.
 *
 *  For supported processor architectures, see \ref Page_DeviceSupport.
 *
 *  \subsection SSec_ConfiguringApps_BOARD The BOARD Parameter
 *  This parameter indicates the target 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 \c /CodeTemplates/DriverStubs/
 *  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 \ref Page_DeviceSupport.
 *
 *  \subsection SSec_ConfiguringApps_F_CPU The F_CPU Parameter
 *  This parameter indicates the target microcontroller's main CPU clock frequency, in Hz. This is used by many libraries (and applications) for
 *  timing related purposes, and should reflect the actual CPU speed after any prescaling or adjustments are performed.
 *
 *  \subsection SSec_ConfiguringApps_F_USB The F_USB Parameter
 *  This parameter indicates the raw input clock frequency to the USB module within the microcontroller in Hz. This may be very different on some platforms
 *  to the main CPU clock or other peripheral/bus clocks.
 *
 *    \note On AVR8 platforms, this must be equal to \c 8000000 or \c 16000000.
 *
 *    \note On XMEGA platforms, this must be equal to a multiple of 6000000 from \c 6000000 to \c 48000000.
 *
 *    \note On UC3 platforms, this must be equal to a multiple of 12000000 from \c 12000000 to \c 48000000.
 *
 *  \subsection SSec_ConfiguringApps_OPTIMIZATION The OPTIMIZATION Parameter
 *  This parameter indicates the level of optimization to use when compiling the application. This will allow you to compile with an optimization level
 *  supported by GCC, from <tt>0</tt> (no optimization) to <tt>3</tt> (fastest runtime optimization) or <tt>s</tt> (smallest size).
 *
 *  \subsection SSec_ConfiguringApps_TARGET The TARGET Parameter
 *  This parameter indicates the application target name, which is used as the base filename for the build binary and debugging files. This will be the
 *  name of the output files once linked together into the final application, ready to load into the target.
 *
 *  \subsection SSec_ConfiguringApps_SRC The SRC Parameter
 *  This parameter indicates the source files used to compile the application, as a list of C (<tt>*.c</tt>), C++ (<tt>*.cpp</tt>) and Assembly (<tt>*.S</tt>) files. Note that
 *  all assembly files must end in a <b>capital</b> .S extension, as lowercase .s files are reserved for GCC intermediate files.
 *
 *  \subsection SSec_ConfiguringApps_LUFA_PATH 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 core. This path may be relative or absolute, however note than even under Windows based systems the
 *  forward-slash (/) path separator must be used.
 *
 *  \subsection SSec_ConfiguringApps_CC_FLAGS The CC_FLAGS Parameter
 *  This parameter lists the compiler flags passed to the C/C++ compiler, the assembler and the linker. These are used as-is directly to GCC and thus
 *  must match GCC's command line options as given in the GCC manual. This variable may be used to define tokens directly on the command line, enable or
 *  disable warnings, adjust the target-specific tuning parameters or other options.
 *
 *  \subsection SSec_ConfiguringApps_LD_FLAGS The LD_FLAGS Parameter
 *  This parameter lists the linker flags passed exclusively to the linker. These are used as-is directly to GCC and thus must match GCC's command line
 *  linker options as given in the GCC manual. This variable may be used to create or relocate custom data sections, or enable linker specific behaviors.
 *
 *
 *  \section Sec_ExampleAppConfig Example Application Makefile Configurations
 *  Below is an example makefile for an AVR8 based AT90USB1287 running at 8MHz, to compile a program called "MyApplication":
 *  \verbatim
    MCU          = at90usb1287
    ARCH         = AVR8
    BOARD        = NONE
    F_CPU        = 8000000
    F_USB        = $(F_CPU)
    OPTIMIZATION = s
    TARGET       = MyApplication
    SRC          = MyApplication.c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
    LUFA_PATH    = ../../../../LUFA
    CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
    LD_FLAGS     =
    \endverbatim
 *
 *  Below is an example makefile for an XMEGA based ATXMEGA128A1U running at 32MHz, to compile a program called "MyApplication":
 *  \verbatim
    MCU          = atxmega128a1u
    ARCH         = XMEGA
    BOARD        = NONE
    F_CPU        = 32000000
    F_USB        = 48000000
    OPTIMIZATION = s
    TARGET       = MyApplication
    SRC          = MyApplication.c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
    LUFA_PATH    = ../../../../LUFA
    CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
    LD_FLAGS     =
    \endverbatim
 *
 *  Below is an example makefile for a UC3 based AT32UC3A0512 running at 50MHz, to compile a program called "MyApplication":
 *  \verbatim
    MCU          = uc3a0512
    ARCH         = UC3
    BOARD        = NONE
    F_CPU        = 50000000
    F_USB        = 48000000
    OPTIMIZATION = s
    TARGET       = MyApplication
    SRC          = MyApplication.c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
    LUFA_PATH    = ../../../../LUFA
    CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
    LD_FLAGS     =
    \endverbatim
 */