]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/system/startup_XMC4200.s
Finalise XMC4000 IAR demos.
[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.1\r
8 * @date     Augsut 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 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
33 \r
34 **************************************************************************** */\r
35 \r
36         MODULE  ?vector_table\r
37 \r
38         AAPCS INTERWORK, VFP_COMPATIBLE, RWPI_COMPATIBLE\r
39         PRESERVE8\r
40 \r
41 \r
42         ;; Forward declaration of sections.\r
43         SECTION CSTACK:DATA:NOROOT(3)\r
44 \r
45         SECTION .intvec:CODE:NOROOT(2)\r
46 \r
47         EXTERN  __iar_program_start\r
48         EXTERN  SystemInit\r
49         PUBLIC  __vector_table\r
50 \r
51         DATA\r
52 \r
53 __iar_init$$done:               ; The vector table is not needed\r
54                                 ; until after copy initialization is done\r
55 \r
56 ;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */\r
57 ;/*\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
61 ; *\r
62 ; * In addition to defining the veneers, the vector table must for these buggy\r
63 ; * devices contain the veneers.\r
64 ; */\r
65 \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
69 \r
70 ;/* A macro to setup a vector table entry based on STEP ID */\r
71 #ifdef WORKAROUND_PMU_CM001\r
72 ExcpVector  macro\r
73             DCD \1_Veneer\r
74             endm\r
75 #else\r
76 ExcpVector  macro\r
77             DCD \1\r
78             endm           \r
79 #endif\r
80 \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
84 ProxyHandler  macro\r
85               PUBWEAK \1\r
86               SECTION .text:CODE:REORDER:NOROOT(1)\r
87 \1\r
88               B \1\r
89 ;/* And then define a veneer that will branch to the final excp handler */              \r
90               PUBWEAK \1_Veneer\r
91               SECTION .text:CODE:REORDER:NOROOT(2)\r
92 \1_Veneer:\r
93               LDR   R0, =\1\r
94               PUSH      {LR}  /* Breaks AAPCS */\r
95               SUB SP,#4       /* Restores AAPCS */\r
96               BLX   R0\r
97               ADD SP,#4\r
98               POP   {PC}\r
99               endm\r
100  ;/* No prefetch bug, hence define only the final exception handler */              \r
101 #else\r
102 ProxyHandler  macro\r
103               PUBWEAK \1\r
104               SECTION .text:CODE:REORDER:NOROOT(1)\r
105 \1\r
106               B \1\r
107               endm\r
108 #endif\r
109 \r
110 ;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */\r
111 \r
112 __vector_table\r
113     DCD   sfe(CSTACK)\r
114     DCD   Reset_Handler                     ; Reset Handler  \r
115               \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
121     DCD   0                           ; Reserved                     \r
122     DCD   0                           ; Reserved                     \r
123     DCD   0                           ; Reserved                     \r
124     DCD   0                           ; Reserved                     \r
125     ExcpVector   SVC_Handler                 ; SVCall Handler               \r
126     ExcpVector   DebugMon_Handler            ; Debug Monitor Handler        \r
127     DCD   0                           ; Reserved                     \r
128     ExcpVector   PendSV_Handler              ; PendSV Handler               \r
129     ExcpVector   SysTick_Handler             ; SysTick Handler              \r
130 \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
244 \r
245 \r
246 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
247 ;;\r
248 ;; Default interrupt handlers.\r
249 ;;\r
250         THUMB\r
251         PUBWEAK Reset_Handler\r
252         SECTION .text:CODE:REORDER(2)\r
253 Reset_Handler\r
254 \r
255         LDR     R0, =SystemInit\r
256         BLX     R0 \r
257         LDR     R0, =SystemInit_DAVE3\r
258         BLX     R0  \r
259         LDR     R0, =__iar_program_start\r
260         BX      R0\r
261         \r
262 \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
272 \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
339 \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
343 SystemInit_DAVE3\r
344         NOP \r
345         BX LR\r
346  \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
352         MOV R0,#1\r
353         BX LR   \r
354 \r
355 PREF_PCON       EQU 0x58004000\r
356 SCU_GCU_PEEN    EQU 0x5000413C\r
357 SCU_GCU_PEFLAG  EQU 0x50004150\r
358 \r
359         \r
360         END\r