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
32 **************************************************************************** */
\r
34 MODULE ?vector_table
\r
36 AAPCS INTERWORK, VFP_COMPATIBLE, RWPI_COMPATIBLE
\r
40 ;; Forward declaration of sections.
\r
41 SECTION CSTACK:DATA:NOROOT(3)
\r
43 SECTION .intvec:CODE:NOROOT(2)
\r
45 EXTERN __iar_program_start
\r
47 PUBLIC __vector_table
\r
51 __iar_init$$done: ; The vector table is not needed
\r
52 ; until after copy initialization is done
\r
54 ;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */
\r
56 ; * STEP_AB and below have the prefetch functional deviation (Errata id: PMU_CM.001).
\r
57 ; * A veneer defined below will first be executed which in turn branches to the final
\r
58 ; * exception handler.
\r
60 ; * In addition to defining the veneers, the vector table must for these buggy
\r
61 ; * devices contain the veneers.
\r
64 ;set WORKAROUND_PMU_CM001 under Options for target
\r
65 ;Initialize varaible WORKAROUND_PMU_CM001 as FALSE
\r
66 WORKAROUND_PMU_CM001 SET 1
\r
68 ;/* A macro to setup a vector table entry based on STEP ID */
\r
69 #ifdef WORKAROUND_PMU_CM001
\r
79 ;/* A macro to ease definition of the various handlers based on STEP ID */
\r
80 #ifdef WORKAROUND_PMU_CM001
\r
81 ;/* First define the final exception handler */
\r
84 SECTION .text:CODE:REORDER:NOROOT(1)
\r
88 ;/* And then define a veneer that will branch to the final excp handler */
\r
89 ProxyHandler_Veneer macro
\r
91 SECTION .text:CODE:REORDER:NOROOT(2)
\r
93 LDR R0, =ProxyHandler
\r
98 ;/* No prefetch bug, hence define only the final exception handler */
\r
102 SECTION .text:CODE:REORDER:NOROOT(1)
\r
108 ;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */
\r
112 DCD Reset_Handler ; Reset Handler
\r
114 ExcpVector NMI_Handler ; NMI Handler
\r
115 ExcpVector HardFault_Handler ; Hard Fault Handler
\r
116 ExcpVector MemManage_Handler ; MPU Fault Handler
\r
117 ExcpVector BusFault_Handler ; Bus Fault Handler
\r
118 ExcpVector UsageFault_Handler ; Usage Fault Handler
\r
123 DCD SVC_Handler ; SVCall Handler
\r
124 DCD DebugMon_Handler ; Debug Monitor Handler
\r
126 ExcpVector PendSV_Handler ; PendSV Handler
\r
127 DCD SysTick_Handler ; SysTick Handler
\r
129 ; Interrupt Handlers for Service Requests (SR) from XMC4200 Peripherals
\r
130 ExcpVector SCU_0_IRQHandler ; Handler name for SR SCU_0
\r
131 ExcpVector ERU0_0_IRQHandler ; Handler name for SR ERU0_0
\r
132 ExcpVector ERU0_1_IRQHandler ; Handler name for SR ERU0_1
\r
133 ExcpVector ERU0_2_IRQHandler ; Handler name for SR ERU0_2
\r
134 ExcpVector ERU0_3_IRQHandler ; Handler name for SR ERU0_3
\r
135 ExcpVector ERU1_0_IRQHandler ; Handler name for SR ERU1_0
\r
136 ExcpVector ERU1_1_IRQHandler ; Handler name for SR ERU1_1
\r
137 ExcpVector ERU1_2_IRQHandler ; Handler name for SR ERU1_2
\r
138 ExcpVector ERU1_3_IRQHandler ; Handler name for SR ERU1_3
\r
139 DCD 0 ; Not Available
\r
140 DCD 0 ; Not Available
\r
141 DCD 0 ; Not Available
\r
142 ExcpVector PMU0_0_IRQHandler ; Handler name for SR PMU0_0
\r
143 DCD 0 ; Not Available
\r
144 ExcpVector VADC0_C0_0_IRQHandler ; Handler name for SR VADC0_C0_0
\r
145 ExcpVector VADC0_C0_1_IRQHandler ; Handler name for SR VADC0_C0_1
\r
146 ExcpVector VADC0_C0_2_IRQHandler ; Handler name for SR VADC0_C0_1
\r
147 ExcpVector VADC0_C0_3_IRQHandler ; Handler name for SR VADC0_C0_3
\r
148 ExcpVector VADC0_G0_0_IRQHandler ; Handler name for SR VADC0_G0_0
\r
149 ExcpVector VADC0_G0_1_IRQHandler ; Handler name for SR VADC0_G0_1
\r
150 ExcpVector VADC0_G0_2_IRQHandler ; Handler name for SR VADC0_G0_2
\r
151 ExcpVector VADC0_G0_3_IRQHandler ; Handler name for SR VADC0_G0_3
\r
152 ExcpVector VADC0_G1_0_IRQHandler ; Handler name for SR VADC0_G1_0
\r
153 ExcpVector VADC0_G1_1_IRQHandler ; Handler name for SR VADC0_G1_1
\r
154 ExcpVector VADC0_G1_2_IRQHandler ; Handler name for SR VADC0_G1_2
\r
155 ExcpVector VADC0_G1_3_IRQHandler ; Handler name for SR VADC0_G1_3
\r
156 DCD 0 ; Not Available
\r
157 DCD 0 ; Not Available
\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 ExcpVector DAC0_0_IRQHandler ; Handler name for SR DAC0_0
\r
173 ExcpVector DAC0_1_IRQHandler ; Handler name for SR DAC0_1
\r
174 ExcpVector CCU40_0_IRQHandler ; Handler name for SR CCU40_0
\r
175 ExcpVector CCU40_1_IRQHandler ; Handler name for SR CCU40_1
\r
176 ExcpVector CCU40_2_IRQHandler ; Handler name for SR CCU40_2
\r
177 ExcpVector CCU40_3_IRQHandler ; Handler name for SR CCU40_3
\r
178 ExcpVector CCU41_0_IRQHandler ; Handler name for SR CCU41_0
\r
179 ExcpVector CCU41_1_IRQHandler ; Handler name for SR CCU41_1
\r
180 ExcpVector CCU41_2_IRQHandler ; Handler name for SR CCU41_2
\r
181 ExcpVector CCU41_3_IRQHandler ; Handler name for SR CCU41_3
\r
182 DCD 0 ; Not Available
\r
183 DCD 0 ; Not Available
\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 ExcpVector CCU80_0_IRQHandler ; Handler name for SR CCU80_0
\r
191 ExcpVector CCU80_1_IRQHandler ; Handler name for SR CCU80_1
\r
192 ExcpVector CCU80_2_IRQHandler ; Handler name for SR CCU80_2
\r
193 ExcpVector CCU80_3_IRQHandler ; Handler name for SR CCU80_3
\r
194 DCD 0 ; Not Available
\r
195 DCD 0 ; Not Available
\r
196 DCD 0 ; Not Available
\r
197 DCD 0 ; Not Available
\r
198 ExcpVector POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0
\r
199 ExcpVector POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1
\r
200 DCD 0 ; Not Available
\r
201 DCD 0 ; Not Available
\r
202 ExcpVector HRPWM_0_IRQHandler ; Handler name for SR HRPWM_0
\r
203 ExcpVector HRPWM_1_IRQHandler ; Handler name for SR HRPWM_1
\r
204 ExcpVector HRPWM_2_IRQHandler ; Handler name for SR HRPWM_2
\r
205 ExcpVector HRPWM_3_IRQHandler ; Handler name for SR HRPWM_3
\r
206 ExcpVector CAN0_0_IRQHandler ; Handler name for SR CAN0_0
\r
207 ExcpVector CAN0_1_IRQHandler ; Handler name for SR CAN0_1
\r
208 ExcpVector CAN0_2_IRQHandler ; Handler name for SR CAN0_2
\r
209 ExcpVector CAN0_3_IRQHandler ; Handler name for SR CAN0_3
\r
210 ExcpVector CAN0_4_IRQHandler ; Handler name for SR CAN0_4
\r
211 ExcpVector CAN0_5_IRQHandler ; Handler name for SR CAN0_5
\r
212 ExcpVector CAN0_6_IRQHandler ; Handler name for SR CAN0_6
\r
213 ExcpVector CAN0_7_IRQHandler ; Handler name for SR CAN0_7
\r
214 ExcpVector USIC0_0_IRQHandler ; Handler name for SR USIC0_0
\r
215 ExcpVector USIC0_1_IRQHandler ; Handler name for SR USIC0_1
\r
216 ExcpVector USIC0_2_IRQHandler ; Handler name for SR USIC0_2
\r
217 ExcpVector USIC0_3_IRQHandler ; Handler name for SR USIC0_3
\r
218 ExcpVector USIC0_4_IRQHandler ; Handler name for SR USIC0_4
\r
219 ExcpVector USIC0_5_IRQHandler ; Handler name for SR USIC0_5
\r
220 ExcpVector USIC1_0_IRQHandler ; Handler name for SR USIC1_0
\r
221 ExcpVector USIC1_1_IRQHandler ; Handler name for SR USIC1_1
\r
222 ExcpVector USIC1_2_IRQHandler ; Handler name for SR USIC1_2
\r
223 ExcpVector USIC1_3_IRQHandler ; Handler name for SR USIC1_3
\r
224 ExcpVector USIC1_4_IRQHandler ; Handler name for SR USIC1_4
\r
225 ExcpVector USIC1_5_IRQHandler ; Handler name for SR USIC1_5
\r
226 DCD 0 ; Not Available
\r
227 DCD 0 ; Not Available
\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 ExcpVector LEDTS0_0_IRQHandler ; Handler name for SR LEDTS0_0
\r
233 DCD 0 ; Not Available
\r
234 ExcpVector FCE0_0_IRQHandler ; Handler name for SR FCE0_0
\r
235 ExcpVector GPDMA0_0_IRQHandler ; Handler name for SR GPDMA0_0
\r
236 DCD 0 ; Not Available
\r
237 ExcpVector USB0_0_IRQHandler ; Handler name for SR USB0_0
\r
238 DCD 0 ; Not Available
\r
239 DCD 0 ; Not Available
\r
240 DCD 0 ; Not Available
\r
241 DCD 0 ; Not Available
\r
244 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\r
246 ;; Default interrupt handlers.
\r
249 PUBWEAK Reset_Handler
\r
250 SECTION .text:CODE:REORDER(2)
\r
253 LDR R0, =SystemInit
\r
255 LDR R0, =SystemInit_DAVE3
\r
257 LDR R0, =__iar_program_start
\r
261 ProxyHandler NMI_Handler
\r
262 ProxyHandler HardFault_Handler
\r
263 ProxyHandler MemManage_Handler
\r
264 ProxyHandler BusFault_Handler
\r
265 ProxyHandler UsageFault_Handler
\r
266 ProxyHandler SVC_Handler
\r
267 ProxyHandler DebugMon_Handler
\r
268 ProxyHandler PendSV_Handler
\r
269 ProxyHandler SysTick_Handler
\r
271 ProxyHandler SCU_0_IRQHandler
\r
272 ProxyHandler ERU0_0_IRQHandler
\r
273 ProxyHandler ERU0_1_IRQHandler
\r
274 ProxyHandler ERU0_2_IRQHandler
\r
275 ProxyHandler ERU0_3_IRQHandler
\r
276 ProxyHandler ERU1_0_IRQHandler
\r
277 ProxyHandler ERU1_1_IRQHandler
\r
278 ProxyHandler ERU1_2_IRQHandler
\r
279 ProxyHandler ERU1_3_IRQHandler
\r
280 ProxyHandler PMU0_0_IRQHandler
\r
281 ProxyHandler VADC0_C0_0_IRQHandler
\r
282 ProxyHandler VADC0_C0_1_IRQHandler
\r
283 ProxyHandler VADC0_C0_2_IRQHandler
\r
284 ProxyHandler VADC0_C0_3_IRQHandler
\r
285 ProxyHandler VADC0_G0_0_IRQHandler
\r
286 ProxyHandler VADC0_G0_1_IRQHandler
\r
287 ProxyHandler VADC0_G0_2_IRQHandler
\r
288 ProxyHandler VADC0_G0_3_IRQHandler
\r
289 ProxyHandler VADC0_G1_0_IRQHandler
\r
290 ProxyHandler VADC0_G1_1_IRQHandler
\r
291 ProxyHandler VADC0_G1_2_IRQHandler
\r
292 ProxyHandler VADC0_G1_3_IRQHandler
\r
293 ProxyHandler DAC0_0_IRQHandler
\r
294 ProxyHandler DAC0_1_IRQHandler
\r
295 ProxyHandler CCU40_0_IRQHandler
\r
296 ProxyHandler CCU40_1_IRQHandler
\r
297 ProxyHandler CCU40_2_IRQHandler
\r
298 ProxyHandler CCU40_3_IRQHandler
\r
299 ProxyHandler CCU41_0_IRQHandler
\r
300 ProxyHandler CCU41_1_IRQHandler
\r
301 ProxyHandler CCU41_2_IRQHandler
\r
302 ProxyHandler CCU41_3_IRQHandler
\r
303 ProxyHandler CCU80_0_IRQHandler
\r
304 ProxyHandler CCU80_1_IRQHandler
\r
305 ProxyHandler CCU80_2_IRQHandler
\r
306 ProxyHandler CCU80_3_IRQHandler
\r
307 ProxyHandler POSIF0_0_IRQHandler
\r
308 ProxyHandler POSIF0_1_IRQHandler
\r
309 ProxyHandler HRPWM_0_IRQHandler
\r
310 ProxyHandler HRPWM_1_IRQHandler
\r
311 ProxyHandler HRPWM_2_IRQHandler
\r
312 ProxyHandler HRPWM_3_IRQHandler
\r
313 ProxyHandler CAN0_0_IRQHandler
\r
314 ProxyHandler CAN0_1_IRQHandler
\r
315 ProxyHandler CAN0_2_IRQHandler
\r
316 ProxyHandler CAN0_3_IRQHandler
\r
317 ProxyHandler CAN0_4_IRQHandler
\r
318 ProxyHandler CAN0_5_IRQHandler
\r
319 ProxyHandler CAN0_6_IRQHandler
\r
320 ProxyHandler CAN0_7_IRQHandler
\r
321 ProxyHandler USIC0_0_IRQHandler
\r
322 ProxyHandler USIC0_1_IRQHandler
\r
323 ProxyHandler USIC0_2_IRQHandler
\r
324 ProxyHandler USIC0_3_IRQHandler
\r
325 ProxyHandler USIC0_4_IRQHandler
\r
326 ProxyHandler USIC0_5_IRQHandler
\r
327 ProxyHandler USIC1_0_IRQHandler
\r
328 ProxyHandler USIC1_1_IRQHandler
\r
329 ProxyHandler USIC1_2_IRQHandler
\r
330 ProxyHandler USIC1_3_IRQHandler
\r
331 ProxyHandler USIC1_4_IRQHandler
\r
332 ProxyHandler USIC1_5_IRQHandler
\r
333 ProxyHandler LEDTS0_0_IRQHandler
\r
334 ProxyHandler FCE0_0_IRQHandler
\r
335 ProxyHandler GPDMA0_0_IRQHandler
\r
336 ProxyHandler USB0_0_IRQHandler
\r
338 ; Definition of the default weak SystemInit_DAVE3 function for DAVE3 system init.
\r
339 PUBWEAK SystemInit_DAVE3
\r
340 SECTION .text:CODE:REORDER:NOROOT(2)
\r
345 ; Definition of the default weak DAVE3 function for clock App usage.
\r
346 ; AllowPLLInitByStartup Handler
\r
347 PUBWEAK AllowPLLInitByStartup
\r
348 SECTION .text:CODE:REORDER:NOROOT(2)
\r
349 AllowPLLInitByStartup
\r
353 PREF_PCON EQU 0x58004000
\r
354 SCU_GCU_PEEN EQU 0x5000413C
\r
355 SCU_GCU_PEFLAG EQU 0x50004150
\r