Difference between revisions of "The ARM7 board"
(→Bootloader) |
|||
Line 119: | Line 119: | ||
====Bootloader==== | ====Bootloader==== | ||
+ | |||
+ | The bootloader is the boards base software and is responsible for two main tasks: deal with low level configuration of the platform (PLL setup, AMC, GIC, peripherals, etc.), load the user application from SD Card into the main memory. The basic steps on bootload execution are listed below: | ||
+ | |||
+ | * Setup memory map | ||
+ | * Setup interrupt vectors in internal RAM | ||
+ | * Setup execution modes stack | ||
+ | * Setup PLL | ||
+ | * Initialize its data section | ||
+ | * Configure peripherals | ||
+ | * Load user application from SD Card | ||
+ | * Branch to user application | ||
===User level functionality=== | ===User level functionality=== |
Revision as of 15:46, 20 March 2009
Contents
Overview
One Member of the Concept Car's network is an ARM7 board. Due to its 32 bit architecture and higher frequency it provides a much bigger computational power than the AT90CAN128 boards. Thus it is well suited to do all the computation-intensive tasks.
Signal Flow
The AT90CAN128 actorboard offers a selection switch/jumper to choose between two different sources to generate its PWM output. By that you can select whether it uses direct input from the sensorboards or works on the preprocessed data from the ARM7 board.
The ARM7 board itself is not intended to directly access sensors or actors, it should merely process data from the CAN bus and produce control messages for the actor board.
Board Functionality
Low Level Functionality
The AT91SAM7A2 ARM processor provides 32-bit processing power to the Concept Car. Among the low level functionalities are:
- SPI
- USART
- CAN
- LED
- GPIO
- ADC
- Buttons
- Ethernet
- Buzzer
To enable access to these functionalities C source code is provided. The source code eases the task of accessing board peripherals and makes software development a bit easier. Besides the resources listed above there is also code for dealing with interrupts, timers, SD Cards and so on.
Memory Map
The board has a 4MB RAM memory accessed by the ARM processor. The access to this memory is configured by the ARM's AMC, which defines the address range for the external memory. Below a description of the current memory map is shown, for further details on the memory map please check the datasheet.
- Before boot:
/---------------\ 0x00000000 | FLASH | | | Low level code initially here (Bootloader: basic low level setup) | 1MB | |_______________| 0x000fffff | | 0x00100000 | Reserved | | | |_______________| 0x002fffff | | 0x00300000 | Internal RAM | | 16kB | |_______________| 0x003fffff | | 0x00400000 | Reserved | | | |_______________| 0xffdfffff | | 0xffe00000 | Peripherals | | | \---------------/ 0xffffffff |
- After boot:
/---------------\ 0x00000000 | | | Internal RAM | Reset and other vectors (data abort, fetch abort, irq, firq) | 16kB | |_______________| 0x000fffff | | 0x00100000 | Reserved | |_ _ _ _ _ _ _ _| 0x002fffff | | 0x00300000 | Reserved | |_______________| 0x3fffffff | | 0x40000000 | Flash 1MB | | External RAM | | 4MB | User application code, loaded by bootloader (subdivided into memory regions described below) | | |_______________| 0x7fffffff | | 0x80000000 | Reserved | |_______________| 0xffdfffff | | 0xffe00000 | Peripherals | | | \---------------/ 0xffffffff |
- External RAM Memory Map:
/---------------\ 0x40600000 | | || | Application | \/ | | User application code gets loaded here |_ _ _ _ _ _| | | | Application | /\ | Stack | || |_ _ _ _ _ _ _ _| 0x40808ffc | | 0x40809000 | | | FREE | |_ _ _ _ _ _| | | | ARM SVR MODE | /\ | STACK | || |_ _ _ _ _ _| 0x409ff000 (Supervisor mode stack) | | | UNDEF STACK | 0x409ffd08 (Undefined exception stack) | ABORT STACK | 0x409ffe04 | IRQ STACK | 0x409fff00 | FIRQ STACK | 0x409ffffc (Last valid address on external memory) \---------------/ |
Bootloader
The bootloader is the boards base software and is responsible for two main tasks: deal with low level configuration of the platform (PLL setup, AMC, GIC, peripherals, etc.), load the user application from SD Card into the main memory. The basic steps on bootload execution are listed below:
- Setup memory map
- Setup interrupt vectors in internal RAM
- Setup execution modes stack
- Setup PLL
- Initialize its data section
- Configure peripherals
- Load user application from SD Card
- Branch to user application
User level functionality
Related Files
User Applications
Simulink Models
TODO bootloader, loading an app, memory management, ...
The most common use case for the ARM7 board is to execute a simulink model.