Difference between revisions of "AVR8"
(→ERIKA Enterprise v3 and RT-Druid v3 for AVR8) |
(→BOARD) |
||
(48 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | = | + | = introduction = |
− | + | This manual describes the porting details of the ERIKA Enterprise v3 kernel(s) for the Atmel (now Microchip) families of microcontrollers which support 8/16-bit RISC AVR cores (aka AVR8). | |
− | + | = AVR8 Features Supported = | |
− | + | The following are the main features of the currently implemented support: | |
− | |||
− | |||
− | |||
− | |||
− | + | * Development tools | |
+ | ** Support for AVR GCC compiler [http://winavr.sourceforge.net/download.html WinAVR] | ||
+ | * Microcontrollers | ||
+ | ** [http://www.microchip.com/design-centers/8-bit/avr-mcus Microchip AVR MCUs] Families | ||
+ | *** [https://www.microchip.com/wwwproducts/en/ATmega328P Microchip ATmega328P] Specific MCU. | ||
+ | * Evaluation Boards | ||
+ | ** [https://store.arduino.cc/arduino-uno-rev3 Arduino Uno Board] (ATmega328p) | ||
+ | * External Libraries | ||
+ | ** Full support for [https://www.arduino.cc/en/Main/Software Arduino SDK 1.8.5]; | ||
− | + | == Tutorials == | |
− | + | The following tutorials are available for this architecture: | |
− | * | + | * [[AVR8_-_Arduino_application_build_on_Windows|AVR8: Arduino application build on Windows]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | = Configuration and Programming = | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ERIKA Enterprise is configured through [[Tutorial: RT-Druid and OIL basics | RT-Druid and an OIL file]] and some other properties. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | The following sections describe the properties and OIL fields customized for Atmel (now Microchip) AVR8 architecture. | |
− | |||
− | |||
− | |||
− | |||
− | == | + | == Compiler Path == |
− | |||
− | + | It is possible to choose the path of the compiler in three different ways: | |
− | |||
− | |||
− | |||
− | + | * ''Compiler specific environment variables'': '''AVR_TOOLS''' | |
+ | ** E.g.: AVR_TOOLS=C:\WinAVR | ||
+ | * ''RT-Druid Eclipse IDE Property''. | ||
+ | * ''RT-Druid Configuration File Entry'': '''preference_avr8__path_for_gcc_compiler''' | ||
+ | ** E.g.: preference_avr8__path_for_gcc_compiler=C:\WinAVR | ||
− | < | + | Here is an [[Common oil.pref example|example of RT-Druid configuration file]]. |
− | + | ||
− | + | == Arduino SDK Path == | |
− | </ | + | |
+ | It is possible to choose the path in three different ways: | ||
+ | |||
+ | * ''Specific environment variables'': '''ARDUINO_SDK_FILES''' | ||
+ | ** E.g.: ARDUINO_SDK_FILES=C:\Program Files (x86)\Arduino | ||
+ | * ''RT-Druid Eclipse IDE Property''. | ||
+ | * ''RT-Druid Configuration File Entry'': '''preference_avr8__path_for_arduino_sdk''' | ||
+ | ** E.g.: preference_avr8__path_for_arduino_sdk=C:\Program Files (x86)\Arduino | ||
+ | |||
+ | Here is an [[Common oil.pref example|example of RT-Druid configuration file]]. | ||
+ | |||
+ | == Arduino Serial Port == | ||
+ | |||
+ | It is possible to choose the Serial Port for Arduino in two different ways: | ||
+ | |||
+ | * ''RT-Druid Eclipse IDE Property''. | ||
+ | * ''RT-Druid Configuration File Entry'': '''preference_avr8__serial_port_for_arduino''' | ||
+ | ** E.g.: preference_avr8__serial_port_for_arduino=COM5 | ||
+ | |||
+ | Here is an [[Common oil.pref example|example of RT-Druid configuration file]]. | ||
+ | |||
+ | == Arduino Serial Baudrate == | ||
+ | |||
+ | It is possible to choose the Serial Baudrate for Arduino in two different ways: | ||
+ | |||
+ | * ''RT-Druid Eclipse IDE Property''. | ||
+ | * ''RT-Druid Configuration File Entry'': '''preference_avr8__serial_baudrate_for_arduino''' | ||
+ | ** E.g.: preference_avr8__serial_baudrate_for_arduino=115200 | ||
+ | |||
+ | Here is an [[Common oil.pref example|example of RT-Druid configuration file]]. | ||
+ | |||
+ | == CPU == | ||
+ | |||
+ | '''CPU_DATA''' must be set to '''AVR8'''. | ||
+ | |||
+ | The available <tt>COMPILER</tt> is <tt>GCC</tt>. | ||
+ | |||
+ | Example of a CPU_DATA section: | ||
+ | |||
+ | CPU_DATA = AVR8 { | ||
+ | COMPILER = GCC; | ||
+ | ... | ||
+ | }; | ||
+ | |||
+ | == MCU == | ||
+ | |||
+ | '''MCU_DATA''' object supports for now the '''MEGA''' value only. | ||
+ | |||
+ | Example of a MCU_DATA section: | ||
+ | |||
+ | MCU_DATA = MEGA { | ||
+ | ... | ||
+ | }; | ||
+ | |||
+ | === MODEL === | ||
+ | |||
+ | '''MODEL''' attribute of '''MCU_DATA''' supports for now the '''MEGA_328p''' value only. | ||
+ | Default value is '''MEGA_328p'''. | ||
+ | |||
+ | Example of MODEL attribute of a MCU_DATA section: | ||
+ | |||
+ | MCU_DATA = MEGA { | ||
+ | MODEL = MEGA_328p; | ||
+ | }; | ||
+ | |||
+ | == BOARD == | ||
+ | |||
+ | For now, there is no NATIVE board support for AVR8 Architecture. The ONLY supported board is [[Arduino]] by [https://www.arduino.cc/en/Main/Software Arduino SDK 1.8.5]. | ||
+ | |||
+ | '''NOTE:''' To support a custom board, it's mandatory to install the Arduino SDK software package and correctly set the related RT-Druid properties. | ||
+ | |||
+ | Moreover it's mandatory to set the ''F_CPU'' macro according to the ''CLOCK FREQUENCY'' set by custom AVR8 MCU Driver (e.g. 16MHz in the following example). | ||
+ | |||
+ | ... | ||
+ | OS myOs { | ||
+ | ... | ||
+ | CFLAGS = "-DF_CPU=16000000L"; | ||
+ | ... | ||
+ | }; | ||
+ | ... | ||
+ | |||
+ | == LIB == | ||
+ | |||
+ | '''LIB''' object supports for now the '''ARDUINO''' value only. | ||
+ | |||
+ | Example of a LIB section: | ||
+ | |||
+ | LIB = ARDUINO { | ||
+ | ... | ||
+ | }; | ||
+ | |||
+ | === ARDUINO === | ||
+ | |||
+ | The following sections describe the OIL fields of the '''LIB''' object customized for the official '''ARDUINO''' SDK supports. | ||
+ | |||
+ | ==== SDK_BOARD ==== | ||
+ | |||
+ | '''SDK_BOARD''' attribute of '''ARDUINO''' supports for now the '''UNO''' value only. | ||
+ | Default value is '''UNO'''. | ||
+ | |||
+ | Example of SDK_BOARD attribute of ARDUINO: | ||
+ | |||
+ | LIB = ARDUINO { | ||
+ | SDK_BOARD = UNO; | ||
+ | ... | ||
+ | }; | ||
+ | |||
+ | ==== VARIANT ==== | ||
+ | |||
+ | '''VARIANT''' attribute of '''ARDUINO''' supports for now the '''CC''' value only. | ||
+ | Default value is '''CC'''. | ||
+ | |||
+ | Example of VARIANT attribute of ARDUINO: | ||
+ | |||
+ | LIB = ARDUINO { | ||
+ | SDK_BOARD = UNO; | ||
+ | VARIANT = CC; | ||
+ | ... | ||
+ | }; | ||
+ | |||
+ | ===== VERSION ===== | ||
+ | |||
+ | '''VERSION''' attribute of '''ARDUINO CC VARIANT''' supports for now the '''"1.8.5"''' value only. | ||
+ | Default value is '''"1.8.5"'''. | ||
+ | |||
+ | Example of VERSION attribute of ARDUINO CC VARIANT: | ||
+ | |||
+ | LIB = ARDUINO { | ||
+ | SDK_BOARD = UNO; | ||
+ | VARIANT = CC { | ||
+ | VERSION = "1.8.5"; | ||
+ | }; | ||
+ | ... | ||
+ | }; | ||
+ | |||
+ | ==== STAND_ALONE ==== | ||
+ | |||
+ | '''STAND_ALONE''' boolean attribute of '''ARDUINO''' configures the build system to generate or not '''libarduinosdk.a''' stand-alone binary library. The default value is set to '''TRUE'''. | ||
+ | Default value is '''TRUE'''. | ||
+ | |||
+ | Example of STAND_ALONE attribute of ARDUINO: | ||
+ | |||
+ | LIB = ARDUINO { | ||
+ | SDK_BOARD = UNO; | ||
+ | VARIANT = CC { | ||
+ | VERSION = "1.8.5"; | ||
+ | }; | ||
+ | STAND_ALONE = TRUE; | ||
+ | }; | ||
+ | |||
+ | == Interrupt Handling == | ||
+ | |||
+ | Interrupt Handling is microcontroller dependent so for each supported Atmel (now Microchip) AVR8 microcontroller family, the ISRs configuration of ERIKA Enterprise v3 is shown below. | ||
+ | |||
+ | === MEGA Family === | ||
+ | |||
+ | The '''MEGA''' family of '''AVR8''' microcontrollers has an interrupt vector table which is stored in the flash memory. The lowest addresses of the interrupt vector table are allocated to the RESET and to the interrupt vectors. Interrupt handlers placed at lower addresses have higher hardware priorities than interrupt handlers placed at higher addresses so the '''PRIORITY''' attribute of the '''ISR''' object in the OIL is USELESS. The complete list of '''SOURCE''' entries is shown below. | ||
+ | |||
+ | * <code>RESET</code>: External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset | ||
+ | * <code>INT0</code>: External Interrupt Request 0 | ||
+ | * <code>INT1</code>: External Interrupt Request 1 | ||
+ | * <code>PCINT0</code>: Pin Change Interrupt Request 0 | ||
+ | * <code>PCINT1</code>: Pin Change Interrupt Request 1 | ||
+ | * <code>PCINT2</code>: Pin Change Interrupt Request 2 | ||
+ | * <code>WDT</code>: Watchdog Time-out Interrupt | ||
+ | * <code>TIMER2_COMPA</code>: Timer/Counter2 Compare Match A | ||
+ | * <code>TIMER2_COMPB</code>: Timer/Counter2 Compare Match B | ||
+ | * <code>TIMER2_OVF</code>: Timer/Counter2 Overflow | ||
+ | * <code>TIMER1_CAPT</code>: Timer/Counter1 Capture Event | ||
+ | * <code>TIMER1_COMPA</code>: Timer/Counter1 Compare Match A | ||
+ | * <code>TIMER1_COMPB</code>: Timer/Coutner1 Compare Match B | ||
+ | * <code>TIMER1_OVF</code>: Timer/Counter1 Overflow | ||
+ | * <code>TIMER0_COMPA</code>: Timer/Counter0 Compare Match A | ||
+ | * <code>TIMER0_COMPB</code>: Timer/Counter0 Compare Match B | ||
+ | * <code>TIMER0_OVF</code>: Timer/Counter0 Overflow | ||
+ | * <code>SPI_STC</code>: SPI Serial Transfer Complete | ||
+ | * <code>USART_RX</code>: USART Rx Complete | ||
+ | * <code>USART_UDRE</code>: USART, Data Register Empty | ||
+ | * <code>USART_TX</code>: USART, Tx Complete | ||
+ | * <code>ADC_ADC</code>: Conversion Complete | ||
+ | * <code>EE_READY</code>: EEPROM Ready | ||
+ | * <code>ANALOG_COMP</code>: Analog Comparator | ||
+ | * <code>TWI</code>: 2-wire Serial Interface | ||
+ | * <code>SPM_READY</code>: Store Program Memory Ready | ||
+ | |||
+ | == EEOPT == | ||
+ | |||
+ | The following EEOPTs are specific of AVR8 Architecture: | ||
+ | * '''__AVR8_GCC_C99__''': Enables C99 compiler option. | ||
+ | |||
+ | = OSEK/VDX Extensions = | ||
+ | |||
+ | This Section contains information about the OSEK/VDX Extensions (or optional features) that have been implemented for the AVR8 support. | ||
+ | |||
+ | == System Timer == | ||
+ | |||
+ | System Timer is microcontroller dependent so for each supported Atmel (now Microchip) AVR8 microcontroller family, the System Timer configuration of ERIKA Enterprise v3 is shown below. | ||
+ | |||
+ | === MEGA Family === | ||
+ | |||
+ | For the '''MEGA''' family of '''AVR8''' microcontrollers the System Timer is linked to TIMER1 so the '''DEVICE''' attribute MUST be se to '''TIMER1_COMPA''' as shown below. | ||
+ | |||
+ | COUNTER SystemTimer { | ||
+ | MINCYCLE = 1; | ||
+ | MAXALLOWEDVALUE = 65535; | ||
+ | TICKSPERBASE = 1; | ||
+ | TYPE = HARDWARE { | ||
+ | DEVICE = "TIMER1_COMPA"; | ||
+ | SYSTEM_TIMER = TRUE; | ||
+ | }; | ||
+ | SECONDSPERTICK = 0.001; | ||
+ | }; | ||
+ | |||
+ | = Additional Notes = | ||
+ | |||
+ | T.B.D. | ||
+ | |||
+ | [[Category:Architectures]] |
Latest revision as of 09:27, 26 September 2018
Contents
introduction
This manual describes the porting details of the ERIKA Enterprise v3 kernel(s) for the Atmel (now Microchip) families of microcontrollers which support 8/16-bit RISC AVR cores (aka AVR8).
AVR8 Features Supported
The following are the main features of the currently implemented support:
- Development tools
- Support for AVR GCC compiler WinAVR
- Microcontrollers
- Microchip AVR MCUs Families
- Microchip ATmega328P Specific MCU.
- Microchip AVR MCUs Families
- Evaluation Boards
- Arduino Uno Board (ATmega328p)
- External Libraries
- Full support for Arduino SDK 1.8.5;
Tutorials
The following tutorials are available for this architecture:
Configuration and Programming
ERIKA Enterprise is configured through RT-Druid and an OIL file and some other properties.
The following sections describe the properties and OIL fields customized for Atmel (now Microchip) AVR8 architecture.
Compiler Path
It is possible to choose the path of the compiler in three different ways:
- Compiler specific environment variables: AVR_TOOLS
- E.g.: AVR_TOOLS=C:\WinAVR
- RT-Druid Eclipse IDE Property.
- RT-Druid Configuration File Entry: preference_avr8__path_for_gcc_compiler
- E.g.: preference_avr8__path_for_gcc_compiler=C:\WinAVR
Here is an example of RT-Druid configuration file.
Arduino SDK Path
It is possible to choose the path in three different ways:
- Specific environment variables: ARDUINO_SDK_FILES
- E.g.: ARDUINO_SDK_FILES=C:\Program Files (x86)\Arduino
- RT-Druid Eclipse IDE Property.
- RT-Druid Configuration File Entry: preference_avr8__path_for_arduino_sdk
- E.g.: preference_avr8__path_for_arduino_sdk=C:\Program Files (x86)\Arduino
Here is an example of RT-Druid configuration file.
Arduino Serial Port
It is possible to choose the Serial Port for Arduino in two different ways:
- RT-Druid Eclipse IDE Property.
- RT-Druid Configuration File Entry: preference_avr8__serial_port_for_arduino
- E.g.: preference_avr8__serial_port_for_arduino=COM5
Here is an example of RT-Druid configuration file.
Arduino Serial Baudrate
It is possible to choose the Serial Baudrate for Arduino in two different ways:
- RT-Druid Eclipse IDE Property.
- RT-Druid Configuration File Entry: preference_avr8__serial_baudrate_for_arduino
- E.g.: preference_avr8__serial_baudrate_for_arduino=115200
Here is an example of RT-Druid configuration file.
CPU
CPU_DATA must be set to AVR8.
The available COMPILER is GCC.
Example of a CPU_DATA section:
CPU_DATA = AVR8 { COMPILER = GCC; ... };
MCU
MCU_DATA object supports for now the MEGA value only.
Example of a MCU_DATA section:
MCU_DATA = MEGA { ... };
MODEL
MODEL attribute of MCU_DATA supports for now the MEGA_328p value only. Default value is MEGA_328p.
Example of MODEL attribute of a MCU_DATA section:
MCU_DATA = MEGA { MODEL = MEGA_328p; };
BOARD
For now, there is no NATIVE board support for AVR8 Architecture. The ONLY supported board is Arduino by Arduino SDK 1.8.5.
NOTE: To support a custom board, it's mandatory to install the Arduino SDK software package and correctly set the related RT-Druid properties.
Moreover it's mandatory to set the F_CPU macro according to the CLOCK FREQUENCY set by custom AVR8 MCU Driver (e.g. 16MHz in the following example).
... OS myOs { ... CFLAGS = "-DF_CPU=16000000L"; ... }; ...
LIB
LIB object supports for now the ARDUINO value only.
Example of a LIB section:
LIB = ARDUINO { ... };
ARDUINO
The following sections describe the OIL fields of the LIB object customized for the official ARDUINO SDK supports.
SDK_BOARD
SDK_BOARD attribute of ARDUINO supports for now the UNO value only. Default value is UNO.
Example of SDK_BOARD attribute of ARDUINO:
LIB = ARDUINO { SDK_BOARD = UNO; ... };
VARIANT
VARIANT attribute of ARDUINO supports for now the CC value only. Default value is CC.
Example of VARIANT attribute of ARDUINO:
LIB = ARDUINO { SDK_BOARD = UNO; VARIANT = CC; ... };
VERSION
VERSION attribute of ARDUINO CC VARIANT supports for now the "1.8.5" value only. Default value is "1.8.5".
Example of VERSION attribute of ARDUINO CC VARIANT:
LIB = ARDUINO { SDK_BOARD = UNO; VARIANT = CC { VERSION = "1.8.5"; }; ... };
STAND_ALONE
STAND_ALONE boolean attribute of ARDUINO configures the build system to generate or not libarduinosdk.a stand-alone binary library. The default value is set to TRUE. Default value is TRUE.
Example of STAND_ALONE attribute of ARDUINO:
LIB = ARDUINO { SDK_BOARD = UNO; VARIANT = CC { VERSION = "1.8.5"; }; STAND_ALONE = TRUE; };
Interrupt Handling
Interrupt Handling is microcontroller dependent so for each supported Atmel (now Microchip) AVR8 microcontroller family, the ISRs configuration of ERIKA Enterprise v3 is shown below.
MEGA Family
The MEGA family of AVR8 microcontrollers has an interrupt vector table which is stored in the flash memory. The lowest addresses of the interrupt vector table are allocated to the RESET and to the interrupt vectors. Interrupt handlers placed at lower addresses have higher hardware priorities than interrupt handlers placed at higher addresses so the PRIORITY attribute of the ISR object in the OIL is USELESS. The complete list of SOURCE entries is shown below.
-
RESET
: External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset -
INT0
: External Interrupt Request 0 -
INT1
: External Interrupt Request 1 -
PCINT0
: Pin Change Interrupt Request 0 -
PCINT1
: Pin Change Interrupt Request 1 -
PCINT2
: Pin Change Interrupt Request 2 -
WDT
: Watchdog Time-out Interrupt -
TIMER2_COMPA
: Timer/Counter2 Compare Match A -
TIMER2_COMPB
: Timer/Counter2 Compare Match B -
TIMER2_OVF
: Timer/Counter2 Overflow -
TIMER1_CAPT
: Timer/Counter1 Capture Event -
TIMER1_COMPA
: Timer/Counter1 Compare Match A -
TIMER1_COMPB
: Timer/Coutner1 Compare Match B -
TIMER1_OVF
: Timer/Counter1 Overflow -
TIMER0_COMPA
: Timer/Counter0 Compare Match A -
TIMER0_COMPB
: Timer/Counter0 Compare Match B -
TIMER0_OVF
: Timer/Counter0 Overflow -
SPI_STC
: SPI Serial Transfer Complete -
USART_RX
: USART Rx Complete -
USART_UDRE
: USART, Data Register Empty -
USART_TX
: USART, Tx Complete -
ADC_ADC
: Conversion Complete -
EE_READY
: EEPROM Ready -
ANALOG_COMP
: Analog Comparator -
TWI
: 2-wire Serial Interface -
SPM_READY
: Store Program Memory Ready
EEOPT
The following EEOPTs are specific of AVR8 Architecture:
- __AVR8_GCC_C99__: Enables C99 compiler option.
OSEK/VDX Extensions
This Section contains information about the OSEK/VDX Extensions (or optional features) that have been implemented for the AVR8 support.
System Timer
System Timer is microcontroller dependent so for each supported Atmel (now Microchip) AVR8 microcontroller family, the System Timer configuration of ERIKA Enterprise v3 is shown below.
MEGA Family
For the MEGA family of AVR8 microcontrollers the System Timer is linked to TIMER1 so the DEVICE attribute MUST be se to TIMER1_COMPA as shown below.
COUNTER SystemTimer { MINCYCLE = 1; MAXALLOWEDVALUE = 65535; TICKSPERBASE = 1; TYPE = HARDWARE { DEVICE = "TIMER1_COMPA"; SYSTEM_TIMER = TRUE; }; SECONDSPERTICK = 0.001; };
Additional Notes
T.B.D.