1 ; <<< Use Configuration Wizard in Context Menu >>>
\r
2 ;******************************************************************************
\r
4 ; startup_rvmdk.S - Startup code for use with Keil's uVision.
\r
6 ; Copyright (c) 2007 Luminary Micro, Inc. All rights reserved.
\r
8 ; Software License Agreement
\r
10 ; Luminary Micro, Inc. (LMI) is supplying this software for use solely and
\r
11 ; exclusively on LMI's microcontroller products.
\r
13 ; The software is owned by LMI and/or its suppliers, and is protected under
\r
14 ; applicable copyright laws. All rights are reserved. Any use in violation
\r
15 ; of the foregoing restrictions may subject the user to criminal sanctions
\r
16 ; under applicable laws, as well as to civil liability for the breach of the
\r
17 ; terms and conditions of this license.
\r
19 ; THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
\r
20 ; OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
\r
21 ; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
\r
22 ; LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
\r
23 ; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
\r
25 ; This is part of revision 1408 of the Stellaris Peripheral Driver Library.
\r
27 ;******************************************************************************
\r
29 ;******************************************************************************
\r
31 ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
\r
33 ;******************************************************************************
\r
34 Stack EQU 0x00000800
\r
36 ;******************************************************************************
\r
38 ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
\r
40 ;******************************************************************************
\r
43 ;******************************************************************************
\r
45 ; Allocate space for the stack.
\r
47 ;******************************************************************************
\r
48 AREA STACK, NOINIT, READWRITE, ALIGN=3
\r
53 ;******************************************************************************
\r
55 ; Allocate space for the heap.
\r
57 ;******************************************************************************
\r
58 AREA HEAP, NOINIT, READWRITE, ALIGN=3
\r
64 ;******************************************************************************
\r
66 ; Indicate that the code in this file preserves 8-byte alignment of the stack.
\r
68 ;******************************************************************************
\r
71 ;******************************************************************************
\r
73 ; Place code into the reset code section.
\r
75 ;******************************************************************************
\r
76 AREA RESET, CODE, READONLY
\r
79 ;******************************************************************************
\r
83 ;******************************************************************************
\r
86 DCD StackMem + Stack ; Top of Stack
\r
87 DCD Reset_Handler ; Reset Handler
\r
88 DCD NmiSR ; NMI Handler
\r
89 DCD FaultISR ; Hard Fault Handler
\r
90 DCD IntDefaultHandler ; MPU Fault Handler
\r
91 DCD IntDefaultHandler ; Bus Fault Handler
\r
92 DCD IntDefaultHandler ; Usage Fault Handler
\r
97 EXTERN vPortSVCHandler
\r
98 DCD vPortSVCHandler ; SVCall Handler
\r
99 DCD IntDefaultHandler ; Debug Monitor Handler
\r
101 EXTERN xPortPendSVHandler
\r
102 DCD xPortPendSVHandler ; PendSV Handler
\r
103 EXTERN xPortSysTickHandler
\r
104 DCD xPortSysTickHandler ; SysTick Handler
\r
105 DCD IntDefaultHandler ; GPIO Port A
\r
106 DCD IntDefaultHandler ; GPIO Port B
\r
107 DCD IntDefaultHandler ; GPIO Port C
\r
108 DCD IntDefaultHandler ; GPIO Port D
\r
109 DCD IntDefaultHandler ; GPIO Port E
\r
110 DCD IntDefaultHandler ; UART0
\r
111 DCD IntDefaultHandler ; UART1
\r
112 DCD IntDefaultHandler ; SSI
\r
113 DCD IntDefaultHandler ; I2C
\r
114 DCD IntDefaultHandler ; PWM Fault
\r
115 DCD IntDefaultHandler ; PWM Generator 0
\r
116 DCD IntDefaultHandler ; PWM Generator 1
\r
117 DCD IntDefaultHandler ; PWM Generator 2
\r
118 DCD IntDefaultHandler ; Quadrature Encoder
\r
119 DCD IntDefaultHandler ; ADC Sequence 0
\r
120 DCD IntDefaultHandler ; ADC Sequence 1
\r
121 DCD IntDefaultHandler ; ADC Sequence 2
\r
122 DCD IntDefaultHandler ; ADC Sequence 3
\r
123 DCD IntDefaultHandler ; Watchdog
\r
124 EXTERN Timer0IntHandler
\r
125 DCD Timer0IntHandler ; Timer 0A
\r
126 DCD IntDefaultHandler ; Timer 0B
\r
127 DCD IntDefaultHandler ; Timer 1A
\r
128 DCD IntDefaultHandler ; Timer 1B
\r
129 EXTERN vT2InterruptHandler
\r
130 DCD vT2InterruptHandler ; Timer 2A
\r
131 DCD IntDefaultHandler ; Timer 2B
\r
132 DCD IntDefaultHandler ; Comp 0
\r
133 DCD IntDefaultHandler ; Comp 1
\r
134 DCD IntDefaultHandler ; Comp 2
\r
135 DCD IntDefaultHandler ; System Control
\r
136 DCD IntDefaultHandler ; Flash Control
\r
137 DCD IntDefaultHandler ; GPIO Port F
\r
138 DCD IntDefaultHandler ; GPIO Port G
\r
139 DCD IntDefaultHandler ; GPIO Port H
\r
140 DCD IntDefaultHandler ; UART2 Rx and Tx
\r
141 DCD IntDefaultHandler ; SSI1 Rx and Tx
\r
142 EXTERN vT3InterruptHandler
\r
143 DCD vT3InterruptHandler ; Timer 3 subtimer A
\r
144 DCD IntDefaultHandler ; Timer 3 subtimer B
\r
145 DCD IntDefaultHandler ; I2C1 Master and Slave
\r
146 DCD IntDefaultHandler ; Quadrature Encoder 1
\r
147 DCD IntDefaultHandler ; CAN0
\r
148 DCD IntDefaultHandler ; CAN1
\r
151 DCD vEMAC_ISR ; Ethernet
\r
152 DCD IntDefaultHandler ; Hibernate
\r
154 ;******************************************************************************
\r
156 ; This is the code that gets called when the processor first starts execution
\r
157 ; following a reset event.
\r
159 ;******************************************************************************
\r
160 EXPORT Reset_Handler
\r
163 ; Call the C library enty point that handles startup. This will copy
\r
164 ; the .data section initializers from flash to SRAM and zero fill the
\r
165 ; .bss section. It will then call __rt_entry, which will be either the
\r
166 ; C library version or the one supplied here depending on the
\r
167 ; configured startup type.
\r
172 ;******************************************************************************
\r
174 ; This is the code that gets called when the processor receives a NMI. This
\r
175 ; simply enters an infinite loop, preserving the system state for examination
\r
178 ;******************************************************************************
\r
182 ;******************************************************************************
\r
184 ; This is the code that gets called when the processor receives a fault
\r
185 ; interrupt. This simply enters an infinite loop, preserving the system state
\r
186 ; for examination by a debugger.
\r
188 ;******************************************************************************
\r
192 ;******************************************************************************
\r
194 ; This is the code that gets called when the processor receives an unexpected
\r
195 ; interrupt. This simply enters an infinite loop, preserving the system state
\r
196 ; for examination by a debugger.
\r
198 ;******************************************************************************
\r
200 B IntDefaultHandler
\r
202 ;******************************************************************************
\r
204 ; Make sure the end of this section is aligned.
\r
206 ;******************************************************************************
\r
209 ;******************************************************************************
\r
211 ; Some code in the normal code section for initializing the heap and stack.
\r
213 ;******************************************************************************
\r
214 AREA |.text|, CODE, READONLY
\r
216 ;******************************************************************************
\r
218 ; The function expected of the C library startup code for defining the stack
\r
219 ; and heap memory locations. For the C library version of the startup code,
\r
220 ; provide this function so that the C library initialization code can find out
\r
221 ; the location of the stack and heap.
\r
223 ;******************************************************************************
\r
224 IF :DEF: __MICROLIB
\r
225 EXPORT __initial_sp
\r
227 EXPORT __heap_limit
\r
229 IMPORT __use_two_region_memory
\r
230 EXPORT __user_initial_stackheap
\r
231 __user_initial_stackheap
\r
233 LDR R1, =(StackMem + Stack)
\r
234 LDR R2, =(HeapMem + Heap)
\r
239 ;******************************************************************************
\r
241 ; Make sure the end of this section is aligned.
\r
243 ;******************************************************************************
\r
246 ;******************************************************************************
\r
248 ; Tell the assembler that we're done.
\r
250 ;******************************************************************************
\r