; <<< Use Configuration Wizard in Context Menu >>> | |
;****************************************************************************** | |
; | |
; startup_rvmdk.S - Startup code for Stellaris. | |
; | |
; Copyright (c) 2006 Luminary Micro, Inc. All rights reserved. | |
; | |
; Software License Agreement | |
; | |
; Luminary Micro, Inc. (LMI) is supplying this software for use solely and | |
; exclusively on LMI's Stellaris Family of microcontroller products. | |
; | |
; The software is owned by LMI and/or its suppliers, and is protected under | |
; applicable copyright laws. All rights are reserved. Any use in violation of | |
; the foregoing restrictions may subject the user to criminal sanctions under | |
; applicable laws, as well as to civil liability for the breach of the terms | |
; and conditions of this license. | |
; | |
; THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED | |
; OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF | |
; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. | |
; LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR | |
; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. | |
; | |
; This is part of revision 816 of the Stellaris Driver Library. | |
; | |
;****************************************************************************** | |
;****************************************************************************** | |
; | |
; <h> Stack Configuration | |
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> | |
; </h> | |
; | |
;****************************************************************************** | |
Stack EQU 0x00000100 | |
;****************************************************************************** | |
; | |
; <h> Heap Configuration | |
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> | |
; </h> | |
; | |
;****************************************************************************** | |
Heap EQU 0x00000000 | |
;****************************************************************************** | |
; | |
; Allocate space for the stack. | |
; | |
;****************************************************************************** | |
AREA STACK, NOINIT, READWRITE, ALIGN=3 | |
StackMem | |
SPACE Stack | |
;****************************************************************************** | |
; | |
; Allocate space for the heap. | |
; | |
;****************************************************************************** | |
AREA HEAP, NOINIT, READWRITE, ALIGN=3 | |
HeapMem | |
SPACE Heap | |
;****************************************************************************** | |
; | |
; Indicate that the code in this file preserves 8-byte alignment of the stack. | |
; | |
;****************************************************************************** | |
PRESERVE8 | |
;****************************************************************************** | |
; | |
; Place code into the reset code section. | |
; | |
;****************************************************************************** | |
AREA RESET, CODE, READONLY | |
THUMB | |
;****************************************************************************** | |
; | |
; The vector table. | |
; | |
;****************************************************************************** | |
EXPORT __Vectors | |
__Vectors | |
DCD StackMem + Stack ; Top of Stack | |
DCD Reset_Handler ; Reset Handler | |
DCD NmiSR ; NMI Handler | |
DCD FaultISR ; Hard Fault Handler | |
DCD IntDefaultHandler ; MPU Fault Handler | |
DCD IntDefaultHandler ; Bus Fault Handler | |
DCD IntDefaultHandler ; Usage Fault Handler | |
DCD 0 ; Reserved | |
DCD 0 ; Reserved | |
DCD 0 ; Reserved | |
DCD 0 ; Reserved | |
DCD vPortSVCHandler ; SVCall Handler | |
DCD IntDefaultHandler ; Debug Monitor Handler | |
DCD 0 ; Reserved | |
DCD xPortPendSVHandler ; PendSV Handler | |
DCD xPortSysTickHandler ; SysTick Handler | |
DCD IntDefaultHandler ; GPIO Port A | |
DCD IntDefaultHandler ; GPIO Port B | |
DCD vGPIO_ISR ; GPIO Port C | |
DCD IntDefaultHandler ; GPIO Port D | |
DCD IntDefaultHandler ; GPIO Port E | |
DCD vUART_ISR ; UART0 | |
DCD IntDefaultHandler ; UART1 | |
DCD IntDefaultHandler ; SSI | |
DCD IntDefaultHandler ; I2C | |
DCD IntDefaultHandler ; PWM Fault | |
DCD IntDefaultHandler ; PWM Generator 0 | |
DCD IntDefaultHandler ; PWM Generator 1 | |
DCD IntDefaultHandler ; PWM Generator 2 | |
DCD IntDefaultHandler ; Quadrature Encoder | |
DCD IntDefaultHandler ; ADC Sequence 0 | |
DCD IntDefaultHandler ; ADC Sequence 1 | |
DCD IntDefaultHandler ; ADC Sequence 2 | |
DCD IntDefaultHandler ; ADC Sequence 3 | |
DCD IntDefaultHandler ; Watchdog | |
DCD IntDefaultHandler ; Timer 0A | |
DCD IntDefaultHandler ; Timer 0B | |
DCD IntDefaultHandler ; Timer 1A | |
DCD IntDefaultHandler ; Timer 1B | |
DCD IntDefaultHandler ; Timer 2A | |
DCD IntDefaultHandler ; Timer 2B | |
DCD IntDefaultHandler ; Comp 0 | |
DCD IntDefaultHandler ; Comp 1 | |
DCD IntDefaultHandler ; Comp 2 | |
DCD IntDefaultHandler ; System Control | |
DCD IntDefaultHandler ; Flash Control | |
;****************************************************************************** | |
; | |
; This is the code that gets called when the processor first starts execution | |
; following a reset event. | |
; | |
;****************************************************************************** | |
EXPORT Reset_Handler | |
Reset_Handler | |
; | |
; Call __main() in the C library, which will call the application | |
; supplied main(). | |
; | |
IMPORT __main | |
IMPORT vGPIO_ISR | |
IMPORT vUART_ISR | |
IMPORT xPortPendSVHandler | |
IMPORT xPortSysTickHandler | |
IMPORT vPortSVCHandler | |
LDR R0, =__main | |
BX R0 | |
;****************************************************************************** | |
; | |
; This is the code that gets called when the processor receives a NMI. This | |
; simply enters an infinite loop, preserving the system state for examination | |
; by a debugger. | |
; | |
;****************************************************************************** | |
NmiSR | |
B NmiSR | |
;****************************************************************************** | |
; | |
; This is the code that gets called when the processor receives a fault | |
; interrupt. This simply enters an infinite loop, preserving the system state | |
; for examination by a debugger. | |
; | |
;****************************************************************************** | |
FaultISR | |
B FaultISR | |
;****************************************************************************** | |
; | |
; This is the code that gets called when the processor receives an unexpected | |
; interrupt. This simply enters an infinite loop, preserving the system state | |
; for examination by a debugger. | |
; | |
;****************************************************************************** | |
IntDefaultHandler | |
B IntDefaultHandler | |
;****************************************************************************** | |
; | |
; Make sure the end of this section is aligned. | |
; | |
;****************************************************************************** | |
ALIGN | |
;****************************************************************************** | |
; | |
; Some code in the normal code section for initializing the heap and stack. | |
; | |
;****************************************************************************** | |
AREA |.text|, CODE, READONLY | |
;****************************************************************************** | |
; | |
; The function expected of the C library startup code for defining the stack | |
; and heap memory locations. | |
; | |
;****************************************************************************** | |
IMPORT __use_two_region_memory | |
EXPORT __user_initial_stackheap | |
__user_initial_stackheap | |
LDR R0, =HeapMem | |
LDR R1, =(StackMem + Stack) | |
LDR R2, =(HeapMem + Heap) | |
LDR R3, =StackMem | |
BX LR | |
;****************************************************************************** | |
; | |
; Make sure the end of this section is aligned. | |
; | |
;****************************************************************************** | |
ALIGN | |
; Note: | |
; Using READWRITE places Section .RTOSHeap in Region ER_RW. | |
; Using NOINIT places Section .RTOSHeap in Region ER_ZI,which means | |
; "ZEROINITIALIZE" (sic), and which is the last region in memory. Then | |
; we need to make this section the last section, which is somewhat tricky, | |
; because we cannot use the sectionname, but need to use a defined symbol: | |
; Linker option: "--last xHeap" | |
EXPORT xHeap | |
AREA RTOSHeap, DATA, NOINIT | |
xHeap | |
;****************************************************************************** | |
; | |
; Tell the assembler that we're done. | |
; | |
;****************************************************************************** | |
END |