1 /*****************************************************************************/
\r
2 /* Startup_XMC4200.s: Startup file for XMC4200 device series for EWARM */
\r
3 /*****************************************************************************/
\r
5 * @file Startup_XMC4200.s
\r
6 * XMC4000 Device Series
\r
10 * Copyright (C) 2012 IAR Systems. All rights reserved.
\r
11 * Copyright (C) 2012 Infineon Technologies AG. All rights reserved.
\r
15 * Infineon Technologies AG (Infineon) is supplying this software for use with
\r
16 * Infineon's microcontrollers. This file can be freely distributed
\r
17 * within development tools that are supporting such microcontrollers.
\r
20 * THIS SOFTWARE IS PROVIDED AS IS. NO WARRANTIES, WHETHER EXPRESS, IMPLIED
\r
21 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
\r
22 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
\r
23 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
\r
24 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
\r
26 ******************************************************************************/
\r
27 /* ********************* Version History *********************************** */
\r
28 /* ***************************************************************************
\r
29 V1.0 January, 30 2013: In ths version a workoraound for the erratum PMU_CM.001
\r
30 is implmented (patch for the Exception and interrupt handlers)
\r
31 V1.1 Augsut, 17 2013: Fix the bug of preprocessor due to workoraound for
\r
32 the erratum PMU_CM.001, and the bug of stack pointer alignment to a 8 byte boundary
\r
34 **************************************************************************** */
\r
36 MODULE ?vector_table
\r
38 AAPCS INTERWORK, VFP_COMPATIBLE, RWPI_COMPATIBLE
\r
42 ;; Forward declaration of sections.
\r
43 SECTION CSTACK:DATA:NOROOT(3)
\r
45 SECTION .intvec:CODE:NOROOT(2)
\r
47 EXTERN __iar_program_start
\r
49 PUBLIC __vector_table
\r
53 __iar_init$$done: ; The vector table is not needed
\r
54 ; until after copy initialization is done
\r
56 ;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */
\r
58 ; * STEP_AB and below have the prefetch functional deviation (Errata id: PMU_CM.001).
\r
59 ; * A veneer defined below will first be executed which in turn branches to the final
\r
60 ; * exception handler.
\r
62 ; * In addition to defining the veneers, the vector table must for these buggy
\r
63 ; * devices contain the veneers.
\r
66 ;set WORKAROUND_PMU_CM001 under Options for target
\r
67 ;define WORKAROUND_PMU_CM001 as TRUE
\r
68 #define WORKAROUND_PMU_CM001 1
\r
70 ;/* A macro to setup a vector table entry based on STEP ID */
\r
71 #ifdef WORKAROUND_PMU_CM001
\r
81 ;/* A macro to ease definition of the various handlers based on STEP ID */
\r
82 #ifdef WORKAROUND_PMU_CM001
\r
83 ;/* First define the final exception handler */
\r
86 SECTION .text:CODE:REORDER:NOROOT(1)
\r
89 ;/* And then define a veneer that will branch to the final excp handler */
\r
91 SECTION .text:CODE:REORDER:NOROOT(2)
\r
94 PUSH {LR} /* Breaks AAPCS */
\r
95 SUB SP,#4 /* Restores AAPCS */
\r
100 ;/* No prefetch bug, hence define only the final exception handler */
\r
104 SECTION .text:CODE:REORDER:NOROOT(1)
\r
110 ;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */
\r
114 DCD Reset_Handler ; Reset Handler
\r
116 ExcpVector NMI_Handler ; NMI Handler
\r
117 ExcpVector HardFault_Handler ; Hard Fault Handler
\r
118 ExcpVector MemManage_Handler ; MPU Fault Handler
\r
119 ExcpVector BusFault_Handler ; Bus Fault Handler
\r
120 ExcpVector UsageFault_Handler ; Usage Fault Handler
\r
125 ExcpVector SVC_Handler ; SVCall Handler
\r
126 ExcpVector DebugMon_Handler ; Debug Monitor Handler
\r
128 ExcpVector PendSV_Handler ; PendSV Handler
\r
129 ExcpVector SysTick_Handler ; SysTick Handler
\r
131 ; Interrupt Handlers for Service Requests (SR) from XMC4200 Peripherals
\r
132 ExcpVector SCU_0_IRQHandler ; Handler name for SR SCU_0
\r
133 ExcpVector ERU0_0_IRQHandler ; Handler name for SR ERU0_0
\r
134 ExcpVector ERU0_1_IRQHandler ; Handler name for SR ERU0_1
\r
135 ExcpVector ERU0_2_IRQHandler ; Handler name for SR ERU0_2
\r
136 ExcpVector ERU0_3_IRQHandler ; Handler name for SR ERU0_3
\r
137 ExcpVector ERU1_0_IRQHandler ; Handler name for SR ERU1_0
\r
138 ExcpVector ERU1_1_IRQHandler ; Handler name for SR ERU1_1
\r
139 ExcpVector ERU1_2_IRQHandler ; Handler name for SR ERU1_2
\r
140 ExcpVector ERU1_3_IRQHandler ; Handler name for SR ERU1_3
\r
141 DCD 0 ; Not Available
\r
142 DCD 0 ; Not Available
\r
143 DCD 0 ; Not Available
\r
144 ExcpVector PMU0_0_IRQHandler ; Handler name for SR PMU0_0
\r
145 DCD 0 ; Not Available
\r
146 ExcpVector VADC0_C0_0_IRQHandler ; Handler name for SR VADC0_C0_0
\r
147 ExcpVector VADC0_C0_1_IRQHandler ; Handler name for SR VADC0_C0_1
\r
148 ExcpVector VADC0_C0_2_IRQHandler ; Handler name for SR VADC0_C0_1
\r
149 ExcpVector VADC0_C0_3_IRQHandler ; Handler name for SR VADC0_C0_3
\r
150 ExcpVector VADC0_G0_0_IRQHandler ; Handler name for SR VADC0_G0_0
\r
151 ExcpVector VADC0_G0_1_IRQHandler ; Handler name for SR VADC0_G0_1
\r
152 ExcpVector VADC0_G0_2_IRQHandler ; Handler name for SR VADC0_G0_2
\r
153 ExcpVector VADC0_G0_3_IRQHandler ; Handler name for SR VADC0_G0_3
\r
154 ExcpVector VADC0_G1_0_IRQHandler ; Handler name for SR VADC0_G1_0
\r
155 ExcpVector VADC0_G1_1_IRQHandler ; Handler name for SR VADC0_G1_1
\r
156 ExcpVector VADC0_G1_2_IRQHandler ; Handler name for SR VADC0_G1_2
\r
157 ExcpVector VADC0_G1_3_IRQHandler ; Handler name for SR VADC0_G1_3
\r
158 DCD 0 ; Not Available
\r
159 DCD 0 ; Not Available
\r
160 DCD 0 ; Not Available
\r
161 DCD 0 ; Not Available
\r
162 DCD 0 ; Not Available
\r
163 DCD 0 ; Not Available
\r
164 DCD 0 ; Not Available
\r
165 DCD 0 ; Not Available
\r
166 DCD 0 ; Not Available
\r
167 DCD 0 ; Not Available
\r
168 DCD 0 ; Not Available
\r
169 DCD 0 ; Not Available
\r
170 DCD 0 ; Not Available
\r
171 DCD 0 ; Not Available
\r
172 DCD 0 ; Not Available
\r
173 DCD 0 ; Not Available
\r
174 ExcpVector DAC0_0_IRQHandler ; Handler name for SR DAC0_0
\r
175 ExcpVector DAC0_1_IRQHandler ; Handler name for SR DAC0_1
\r
176 ExcpVector CCU40_0_IRQHandler ; Handler name for SR CCU40_0
\r
177 ExcpVector CCU40_1_IRQHandler ; Handler name for SR CCU40_1
\r
178 ExcpVector CCU40_2_IRQHandler ; Handler name for SR CCU40_2
\r
179 ExcpVector CCU40_3_IRQHandler ; Handler name for SR CCU40_3
\r
180 ExcpVector CCU41_0_IRQHandler ; Handler name for SR CCU41_0
\r
181 ExcpVector CCU41_1_IRQHandler ; Handler name for SR CCU41_1
\r
182 ExcpVector CCU41_2_IRQHandler ; Handler name for SR CCU41_2
\r
183 ExcpVector CCU41_3_IRQHandler ; Handler name for SR CCU41_3
\r
184 DCD 0 ; Not Available
\r
185 DCD 0 ; Not Available
\r
186 DCD 0 ; Not Available
\r
187 DCD 0 ; Not Available
\r
188 DCD 0 ; Not Available
\r
189 DCD 0 ; Not Available
\r
190 DCD 0 ; Not Available
\r
191 DCD 0 ; Not Available
\r
192 ExcpVector CCU80_0_IRQHandler ; Handler name for SR CCU80_0
\r
193 ExcpVector CCU80_1_IRQHandler ; Handler name for SR CCU80_1
\r
194 ExcpVector CCU80_2_IRQHandler ; Handler name for SR CCU80_2
\r
195 ExcpVector CCU80_3_IRQHandler ; Handler name for SR CCU80_3
\r
196 DCD 0 ; Not Available
\r
197 DCD 0 ; Not Available
\r
198 DCD 0 ; Not Available
\r
199 DCD 0 ; Not Available
\r
200 ExcpVector POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0
\r
201 ExcpVector POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1
\r
202 DCD 0 ; Not Available
\r
203 DCD 0 ; Not Available
\r
204 ExcpVector HRPWM_0_IRQHandler ; Handler name for SR HRPWM_0
\r
205 ExcpVector HRPWM_1_IRQHandler ; Handler name for SR HRPWM_1
\r
206 ExcpVector HRPWM_2_IRQHandler ; Handler name for SR HRPWM_2
\r
207 ExcpVector HRPWM_3_IRQHandler ; Handler name for SR HRPWM_3
\r
208 ExcpVector CAN0_0_IRQHandler ; Handler name for SR CAN0_0
\r
209 ExcpVector CAN0_1_IRQHandler ; Handler name for SR CAN0_1
\r
210 ExcpVector CAN0_2_IRQHandler ; Handler name for SR CAN0_2
\r
211 ExcpVector CAN0_3_IRQHandler ; Handler name for SR CAN0_3
\r
212 ExcpVector CAN0_4_IRQHandler ; Handler name for SR CAN0_4
\r
213 ExcpVector CAN0_5_IRQHandler ; Handler name for SR CAN0_5
\r
214 ExcpVector CAN0_6_IRQHandler ; Handler name for SR CAN0_6
\r
215 ExcpVector CAN0_7_IRQHandler ; Handler name for SR CAN0_7
\r
216 ExcpVector USIC0_0_IRQHandler ; Handler name for SR USIC0_0
\r
217 ExcpVector USIC0_1_IRQHandler ; Handler name for SR USIC0_1
\r
218 ExcpVector USIC0_2_IRQHandler ; Handler name for SR USIC0_2
\r
219 ExcpVector USIC0_3_IRQHandler ; Handler name for SR USIC0_3
\r
220 ExcpVector USIC0_4_IRQHandler ; Handler name for SR USIC0_4
\r
221 ExcpVector USIC0_5_IRQHandler ; Handler name for SR USIC0_5
\r
222 ExcpVector USIC1_0_IRQHandler ; Handler name for SR USIC1_0
\r
223 ExcpVector USIC1_1_IRQHandler ; Handler name for SR USIC1_1
\r
224 ExcpVector USIC1_2_IRQHandler ; Handler name for SR USIC1_2
\r
225 ExcpVector USIC1_3_IRQHandler ; Handler name for SR USIC1_3
\r
226 ExcpVector USIC1_4_IRQHandler ; Handler name for SR USIC1_4
\r
227 ExcpVector USIC1_5_IRQHandler ; Handler name for SR USIC1_5
\r
228 DCD 0 ; Not Available
\r
229 DCD 0 ; Not Available
\r
230 DCD 0 ; Not Available
\r
231 DCD 0 ; Not Available
\r
232 DCD 0 ; Not Available
\r
233 DCD 0 ; Not Available
\r
234 ExcpVector LEDTS0_0_IRQHandler ; Handler name for SR LEDTS0_0
\r
235 DCD 0 ; Not Available
\r
236 ExcpVector FCE0_0_IRQHandler ; Handler name for SR FCE0_0
\r
237 ExcpVector GPDMA0_0_IRQHandler ; Handler name for SR GPDMA0_0
\r
238 DCD 0 ; Not Available
\r
239 ExcpVector USB0_0_IRQHandler ; Handler name for SR USB0_0
\r
240 DCD 0 ; Not Available
\r
241 DCD 0 ; Not Available
\r
242 DCD 0 ; Not Available
\r
243 DCD 0 ; Not Available
\r
246 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\r
248 ;; Default interrupt handlers.
\r
251 PUBWEAK Reset_Handler
\r
252 SECTION .text:CODE:REORDER(2)
\r
255 LDR R0, =SystemInit
\r
257 LDR R0, =SystemInit_DAVE3
\r
259 LDR R0, =__iar_program_start
\r
263 ProxyHandler NMI_Handler
\r
264 ProxyHandler HardFault_Handler
\r
265 ProxyHandler MemManage_Handler
\r
266 ProxyHandler BusFault_Handler
\r
267 ProxyHandler UsageFault_Handler
\r
268 ProxyHandler SVC_Handler
\r
269 ProxyHandler DebugMon_Handler
\r
270 ProxyHandler PendSV_Handler
\r
271 ProxyHandler SysTick_Handler
\r
273 ProxyHandler SCU_0_IRQHandler
\r
274 ProxyHandler ERU0_0_IRQHandler
\r
275 ProxyHandler ERU0_1_IRQHandler
\r
276 ProxyHandler ERU0_2_IRQHandler
\r
277 ProxyHandler ERU0_3_IRQHandler
\r
278 ProxyHandler ERU1_0_IRQHandler
\r
279 ProxyHandler ERU1_1_IRQHandler
\r
280 ProxyHandler ERU1_2_IRQHandler
\r
281 ProxyHandler ERU1_3_IRQHandler
\r
282 ProxyHandler PMU0_0_IRQHandler
\r
283 ProxyHandler VADC0_C0_0_IRQHandler
\r
284 ProxyHandler VADC0_C0_1_IRQHandler
\r
285 ProxyHandler VADC0_C0_2_IRQHandler
\r
286 ProxyHandler VADC0_C0_3_IRQHandler
\r
287 ProxyHandler VADC0_G0_0_IRQHandler
\r
288 ProxyHandler VADC0_G0_1_IRQHandler
\r
289 ProxyHandler VADC0_G0_2_IRQHandler
\r
290 ProxyHandler VADC0_G0_3_IRQHandler
\r
291 ProxyHandler VADC0_G1_0_IRQHandler
\r
292 ProxyHandler VADC0_G1_1_IRQHandler
\r
293 ProxyHandler VADC0_G1_2_IRQHandler
\r
294 ProxyHandler VADC0_G1_3_IRQHandler
\r
295 ProxyHandler DAC0_0_IRQHandler
\r
296 ProxyHandler DAC0_1_IRQHandler
\r
297 ProxyHandler CCU40_0_IRQHandler
\r
298 ProxyHandler CCU40_1_IRQHandler
\r
299 ProxyHandler CCU40_2_IRQHandler
\r
300 ProxyHandler CCU40_3_IRQHandler
\r
301 ProxyHandler CCU41_0_IRQHandler
\r
302 ProxyHandler CCU41_1_IRQHandler
\r
303 ProxyHandler CCU41_2_IRQHandler
\r
304 ProxyHandler CCU41_3_IRQHandler
\r
305 ProxyHandler CCU80_0_IRQHandler
\r
306 ProxyHandler CCU80_1_IRQHandler
\r
307 ProxyHandler CCU80_2_IRQHandler
\r
308 ProxyHandler CCU80_3_IRQHandler
\r
309 ProxyHandler POSIF0_0_IRQHandler
\r
310 ProxyHandler POSIF0_1_IRQHandler
\r
311 ProxyHandler HRPWM_0_IRQHandler
\r
312 ProxyHandler HRPWM_1_IRQHandler
\r
313 ProxyHandler HRPWM_2_IRQHandler
\r
314 ProxyHandler HRPWM_3_IRQHandler
\r
315 ProxyHandler CAN0_0_IRQHandler
\r
316 ProxyHandler CAN0_1_IRQHandler
\r
317 ProxyHandler CAN0_2_IRQHandler
\r
318 ProxyHandler CAN0_3_IRQHandler
\r
319 ProxyHandler CAN0_4_IRQHandler
\r
320 ProxyHandler CAN0_5_IRQHandler
\r
321 ProxyHandler CAN0_6_IRQHandler
\r
322 ProxyHandler CAN0_7_IRQHandler
\r
323 ProxyHandler USIC0_0_IRQHandler
\r
324 ProxyHandler USIC0_1_IRQHandler
\r
325 ProxyHandler USIC0_2_IRQHandler
\r
326 ProxyHandler USIC0_3_IRQHandler
\r
327 ProxyHandler USIC0_4_IRQHandler
\r
328 ProxyHandler USIC0_5_IRQHandler
\r
329 ProxyHandler USIC1_0_IRQHandler
\r
330 ProxyHandler USIC1_1_IRQHandler
\r
331 ProxyHandler USIC1_2_IRQHandler
\r
332 ProxyHandler USIC1_3_IRQHandler
\r
333 ProxyHandler USIC1_4_IRQHandler
\r
334 ProxyHandler USIC1_5_IRQHandler
\r
335 ProxyHandler LEDTS0_0_IRQHandler
\r
336 ProxyHandler FCE0_0_IRQHandler
\r
337 ProxyHandler GPDMA0_0_IRQHandler
\r
338 ProxyHandler USB0_0_IRQHandler
\r
340 ; Definition of the default weak SystemInit_DAVE3 function for DAVE3 system init.
\r
341 PUBWEAK SystemInit_DAVE3
\r
342 SECTION .text:CODE:REORDER:NOROOT(2)
\r
347 ; Definition of the default weak DAVE3 function for clock App usage.
\r
348 ; AllowPLLInitByStartup Handler
\r
349 PUBWEAK AllowPLLInitByStartup
\r
350 SECTION .text:CODE:REORDER:NOROOT(2)
\r
351 AllowPLLInitByStartup
\r
355 PREF_PCON EQU 0x58004000
\r
356 SCU_GCU_PEEN EQU 0x5000413C
\r
357 SCU_GCU_PEFLAG EQU 0x50004150
\r