]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/system/startup_XMC4200.s
Rename directories with XMC4500 in their name that now contain XMC4200 and XMC4000...
[freertos] / FreeRTOS / Demo / CORTEX_M4F_Infineon_XMC4000_IAR / system / startup_XMC4200.s
1 /*****************************************************************************/\r
2 /* Startup_XMC4200.s: Startup file for XMC4200 device series for EWARM                */\r
3 /*****************************************************************************/\r
4 /*\r
5 * @file     Startup_XMC4200.s\r
6 *           XMC4000 Device Series\r
7 * @version  V1.0\r
8 * @date     Jan 2013\r
9 *\r
10 * Copyright (C) 2012 IAR Systems. All rights reserved.\r
11 * Copyright (C) 2012 Infineon Technologies AG. All rights reserved.\r
12 *\r
13 *\r
14 * @par\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
18 *\r
19 * @par\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
25 *\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 \r
32 **************************************************************************** */\r
33 \r
34         MODULE  ?vector_table\r
35 \r
36         AAPCS INTERWORK, VFP_COMPATIBLE, RWPI_COMPATIBLE\r
37         PRESERVE8\r
38 \r
39 \r
40         ;; Forward declaration of sections.\r
41         SECTION CSTACK:DATA:NOROOT(3)\r
42 \r
43         SECTION .intvec:CODE:NOROOT(2)\r
44 \r
45         EXTERN  __iar_program_start\r
46         EXTERN  SystemInit\r
47         PUBLIC  __vector_table\r
48 \r
49         DATA\r
50 \r
51 __iar_init$$done:               ; The vector table is not needed\r
52                                 ; until after copy initialization is done\r
53 \r
54 ;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */\r
55 ;/*\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
59 ; *\r
60 ; * In addition to defining the veneers, the vector table must for these buggy\r
61 ; * devices contain the veneers.\r
62 ; */\r
63 \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
67 \r
68 ;/* A macro to setup a vector table entry based on STEP ID */\r
69 #ifdef WORKAROUND_PMU_CM001\r
70 ExcpVector  macro\r
71             DCD \1_Veneer\r
72             endm\r
73 #else\r
74 ExcpVector  macro\r
75             DCD \1\r
76             endm\r
77 #endif\r
78 \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
82 ProxyHandler  macro\r
83               PUBWEAK \1\r
84               SECTION .text:CODE:REORDER:NOROOT(1)\r
85 \1\r
86               B \1\r
87               endm\r
88 ;/* And then define a veneer that will branch to the final excp handler */\r
89 ProxyHandler_Veneer  macro\r
90               PUBWEAK \1\r
91               SECTION .text:CODE:REORDER:NOROOT(2)\r
92 \1\r
93               LDR   R0, =ProxyHandler\r
94               PUSH      {LR}\r
95               BLX   R0\r
96               POP   {PC}\r
97               endm\r
98  ;/* No prefetch bug, hence define only the final exception handler */\r
99 #else\r
100 ProxyHandler  macro\r
101               PUBWEAK \1\r
102               SECTION .text:CODE:REORDER:NOROOT(1)\r
103 \1\r
104               B \1\r
105               endm\r
106 #endif\r
107 \r
108 ;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */\r
109 \r
110 __vector_table\r
111     DCD   sfe(CSTACK)\r
112     DCD   Reset_Handler                     ; Reset Handler\r
113 \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
119     DCD   0                           ; Reserved\r
120     DCD   0                           ; Reserved\r
121     DCD   0                           ; Reserved\r
122     DCD   0                           ; Reserved\r
123     DCD          SVC_Handler                 ; SVCall Handler\r
124     DCD          DebugMon_Handler            ; Debug Monitor Handler\r
125     DCD   0                           ; Reserved\r
126     ExcpVector   PendSV_Handler              ; PendSV Handler\r
127     DCD          SysTick_Handler             ; SysTick Handler\r
128 \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
242 \r
243 \r
244 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
245 ;;\r
246 ;; Default interrupt handlers.\r
247 ;;\r
248         THUMB\r
249         PUBWEAK Reset_Handler\r
250         SECTION .text:CODE:REORDER(2)\r
251 Reset_Handler\r
252 \r
253         LDR     R0, =SystemInit\r
254         BLX     R0\r
255         LDR     R0, =SystemInit_DAVE3\r
256         BLX     R0\r
257         LDR     R0, =__iar_program_start\r
258         BX      R0\r
259 \r
260 \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
270 \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
337 \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
341 SystemInit_DAVE3\r
342         NOP\r
343         BX LR\r
344 \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
350         MOV R0,#1\r
351         BX LR\r
352 \r
353 PREF_PCON       EQU 0x58004000\r
354 SCU_GCU_PEEN    EQU 0x5000413C\r
355 SCU_GCU_PEFLAG  EQU 0x50004150\r
356 \r
357 \r
358         END\r