1 ;************************************************
\r
3 ;* Part one of the system initialization code, contains low-level
\r
4 ;* initialization, plain thumb variant.
\r
6 ;* Copyright 2013 IAR Systems. All rights reserved.
\r
8 ;* $Revision: 64600 $
\r
10 ;******************* Version History **********************************************
\r
12 ; V6, May, 16,2013 TYS:a) Add XMC1300_SCU.inc
\r
14 ;**********************************************************************************
\r
16 ; The modules in this file are included in the libraries, and may be replaced
\r
17 ; by any user-defined modules that define the PUBLIC symbol _program_start or
\r
18 ; a user defined start symbol.
\r
19 ; To override the cstartup defined in the library, simply add your modified
\r
20 ; version to the workbench project.
\r
28 #include "XMC1300_SCU.inc"
\r
29 #include "Device_Data.h"
\r
31 #define CLKVAL1_SSW 0x00000100
\r
32 #define CLKVAL2_SSW 0x00000000
\r
35 ;; Forward declaration of sections.
\r
36 SECTION CSTACK:DATA:NOROOT(3)
\r
37 SECTION .intvec:CODE:NOROOT(2)
\r
39 EXTERN __iar_program_start
\r
40 PUBLIC __vector_table
\r
45 DCD Reset_Handler ; Reset Handler
\r
48 DCD CLKVAL1_SSW ; 0x10 CLK_VAL1 - (CLKCR default)
\r
49 DCD CLKVAL2_SSW ; 0x14 CLK_VAL2 - (CGATCLR0 default)
\r
51 SECTION .vect_table:CODE:ROOT(2)
\r
53 LDR R0,=HardFault_Handler
\r
55 LDR R0,=Undef_Handler
\r
57 LDR R0,=Undef_Handler
\r
59 LDR R0,=Undef_Handler
\r
61 LDR R0,=Undef_Handler
\r
63 LDR R0,=Undef_Handler
\r
65 LDR R0,=Undef_Handler
\r
67 LDR R0,=Undef_Handler
\r
71 LDR R0,=Undef_Handler
\r
73 LDR R0,=Undef_Handler
\r
75 LDR R0,=PendSV_Handler
\r
77 LDR R0,=SysTick_Handler
\r
80 ; External Interrupts
\r
81 LDR R0,=SCU_0_IRQHandler ; Handler name for SR SCU_0
\r
83 LDR R0,=SCU_1_IRQHandler ; Handler name for SR SCU_1
\r
85 LDR R0,=SCU_2_IRQHandler ; Handler name for SR SCU_2
\r
87 LDR R0,=ERU0_0_IRQHandler ; Handler name for SR ERU0_0
\r
89 LDR R0,=ERU0_1_IRQHandler ; Handler name for SR ERU0_1
\r
91 LDR R0,=ERU0_2_IRQHandler ; Handler name for SR ERU0_2
\r
93 LDR R0,=ERU0_3_IRQHandler ; Handler name for SR ERU0_3
\r
95 LDR R0,=MATH0_0_IRQHandler ; Handler name for SR MATH0_0
\r
97 LDR R0,=Undef_Handler ; Not Available
\r
99 LDR R0,=USIC0_0_IRQHandler ; Handler name for SR USIC0_0
\r
101 LDR R0,=USIC0_1_IRQHandler ; Handler name for SR USIC0_1
\r
103 LDR R0,=USIC0_2_IRQHandler ; Handler name for SR USIC0_2
\r
105 LDR R0,=USIC0_3_IRQHandler ; Handler name for SR USIC0_3
\r
107 LDR R0,=USIC0_4_IRQHandler ; Handler name for SR USIC0_4
\r
109 LDR R0,=USIC0_5_IRQHandler ; Handler name for SR USIC0_5
\r
111 LDR R0,=VADC0_C0_0_IRQHandler ; Handler name for SR VADC0_C0_0
\r
113 LDR R0,=VADC0_C0_1_IRQHandler ; Handler name for SR VADC0_C0_1
\r
115 LDR R0,=VADC0_G0_0_IRQHandler ; Handler name for SR VADC0_G0_0
\r
117 LDR R0,=VADC0_G0_1_IRQHandler ; Handler name for SR VADC0_G0_1
\r
119 LDR R0,=VADC0_G1_0_IRQHandler ; Handler name for SR VADC0_G1_0
\r
121 LDR R0,=VADC0_G1_1_IRQHandler ; Handler name for SR VADC0_G1_1
\r
123 LDR R0,=CCU40_0_IRQHandler ; Handler name for SR CCU40_0
\r
125 LDR R0,=CCU40_1_IRQHandler ; Handler name for SR CCU40_1
\r
127 LDR R0,=CCU40_2_IRQHandler ; Handler name for SR CCU40_2
\r
129 LDR R0,=CCU40_3_IRQHandler ; Handler name for SR CCU40_3
\r
131 LDR R0,=CCU80_0_IRQHandler ; Handler name for SR CCU80_0
\r
133 LDR R0,=CCU80_1_IRQHandler ; Handler name for SR CCU80_1
\r
135 LDR R0,=POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0
\r
137 LDR R0,=POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1
\r
139 LDR R0,=Undef_Handler ; Not Available
\r
141 LDR R0,=Undef_Handler ; Not Available
\r
143 LDR R0,=BCCU0_0_IRQHandler ; Handler name for SR BCCU0_0
\r
146 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\r
148 ;; Default interrupt handlers.
\r
151 SECTION .text:CODE:NOROOT(2)
\r
155 PUBLIC Reset_Handler
\r
156 SECTION .text:CODE:REORDER(2)
\r
158 LDR R0, =SystemInit
\r
160 LDR R0, =SystemInit_DAVE3
\r
162 LDR R0, =__iar_program_start
\r
165 PUBWEAK Undef_Handler
\r
166 SECTION .text:CODE:REORDER:NOROOT(1)
\r
171 PUBWEAK HardFault_Handler
\r
172 SECTION .text:CODE:REORDER:NOROOT(1)
\r
174 B HardFault_Handler
\r
177 PUBWEAK SVC_Handler
\r
178 SECTION .text:CODE:REORDER:NOROOT(1)
\r
183 PUBWEAK PendSV_Handler
\r
184 SECTION .text:CODE:REORDER:NOROOT(1)
\r
189 PUBWEAK SysTick_Handler
\r
190 SECTION .text:CODE:REORDER:NOROOT(1)
\r
195 PUBWEAK SCU_0_IRQHandler
\r
196 SECTION .text:CODE:REORDER:NOROOT(1)
\r
200 PUBWEAK SCU_1_IRQHandler
\r
201 SECTION .text:CODE:REORDER:NOROOT(1)
\r
206 PUBWEAK SCU_2_IRQHandler
\r
207 SECTION .text:CODE:REORDER:NOROOT(1)
\r
212 PUBWEAK ERU0_0_IRQHandler
\r
213 SECTION .text:CODE:REORDER:NOROOT(1)
\r
215 B ERU0_0_IRQHandler
\r
218 PUBWEAK ERU0_1_IRQHandler
\r
219 SECTION .text:CODE:REORDER:NOROOT(1)
\r
221 B ERU0_1_IRQHandler
\r
224 PUBWEAK ERU0_2_IRQHandler
\r
225 SECTION .text:CODE:REORDER:NOROOT(1)
\r
227 B ERU0_2_IRQHandler
\r
230 PUBWEAK ERU0_3_IRQHandler
\r
231 SECTION .text:CODE:REORDER:NOROOT(1)
\r
233 B ERU0_3_IRQHandler
\r
236 PUBWEAK MATH0_0_IRQHandler
\r
237 SECTION .text:CODE:REORDER:NOROOT(1)
\r
239 B MATH0_0_IRQHandler
\r
242 PUBWEAK USIC0_0_IRQHandler
\r
243 SECTION .text:CODE:REORDER:NOROOT(1)
\r
245 B USIC0_0_IRQHandler
\r
248 PUBWEAK USIC0_1_IRQHandler
\r
249 SECTION .text:CODE:REORDER:NOROOT(1)
\r
251 B USIC0_1_IRQHandler
\r
254 PUBWEAK USIC0_2_IRQHandler
\r
255 SECTION .text:CODE:REORDER:NOROOT(1)
\r
257 B USIC0_2_IRQHandler
\r
260 PUBWEAK USIC0_3_IRQHandler
\r
261 SECTION .text:CODE:REORDER:NOROOT(1)
\r
263 B USIC0_3_IRQHandler
\r
266 PUBWEAK USIC0_4_IRQHandler
\r
267 SECTION .text:CODE:REORDER:NOROOT(1)
\r
269 B USIC0_4_IRQHandler
\r
272 PUBWEAK USIC0_5_IRQHandler
\r
273 SECTION .text:CODE:REORDER:NOROOT(1)
\r
275 B USIC0_5_IRQHandler
\r
278 PUBWEAK VADC0_C0_0_IRQHandler
\r
279 SECTION .text:CODE:REORDER:NOROOT(1)
\r
280 VADC0_C0_0_IRQHandler
\r
281 B VADC0_C0_0_IRQHandler
\r
284 PUBWEAK VADC0_C0_1_IRQHandler
\r
285 SECTION .text:CODE:REORDER:NOROOT(1)
\r
286 VADC0_C0_1_IRQHandler
\r
287 B VADC0_C0_1_IRQHandler
\r
290 PUBWEAK VADC0_G0_0_IRQHandler
\r
291 SECTION .text:CODE:REORDER:NOROOT(1)
\r
292 VADC0_G0_0_IRQHandler
\r
293 B VADC0_G0_0_IRQHandler
\r
296 PUBWEAK VADC0_G0_1_IRQHandler
\r
297 SECTION .text:CODE:REORDER:NOROOT(1)
\r
298 VADC0_G0_1_IRQHandler
\r
299 B VADC0_G0_1_IRQHandler
\r
302 PUBWEAK VADC0_G1_0_IRQHandler
\r
303 SECTION .text:CODE:REORDER:NOROOT(1)
\r
304 VADC0_G1_0_IRQHandler
\r
305 B VADC0_G1_0_IRQHandler
\r
308 PUBWEAK VADC0_G1_1_IRQHandler
\r
309 SECTION .text:CODE:REORDER:NOROOT(1)
\r
310 VADC0_G1_1_IRQHandler
\r
311 B VADC0_G1_1_IRQHandler
\r
314 PUBWEAK CCU40_0_IRQHandler
\r
315 SECTION .text:CODE:REORDER:NOROOT(1)
\r
317 B CCU40_0_IRQHandler
\r
320 PUBWEAK CCU40_1_IRQHandler
\r
321 SECTION .text:CODE:REORDER:NOROOT(1)
\r
323 B CCU40_1_IRQHandler
\r
326 PUBWEAK CCU40_2_IRQHandler
\r
327 SECTION .text:CODE:REORDER:NOROOT(1)
\r
329 B CCU40_2_IRQHandler
\r
332 PUBWEAK CCU40_3_IRQHandler
\r
333 SECTION .text:CODE:REORDER:NOROOT(1)
\r
335 B CCU40_3_IRQHandler
\r
338 PUBWEAK CCU80_0_IRQHandler
\r
339 SECTION .text:CODE:REORDER:NOROOT(1)
\r
341 B CCU80_0_IRQHandler
\r
344 PUBWEAK CCU80_1_IRQHandler
\r
345 SECTION .text:CODE:REORDER:NOROOT(1)
\r
347 B CCU80_1_IRQHandler
\r
350 PUBWEAK POSIF0_0_IRQHandler
\r
351 SECTION .text:CODE:REORDER:NOROOT(1)
\r
352 POSIF0_0_IRQHandler
\r
353 B POSIF0_0_IRQHandler
\r
356 PUBWEAK POSIF0_1_IRQHandler
\r
357 SECTION .text:CODE:REORDER:NOROOT(1)
\r
358 POSIF0_1_IRQHandler
\r
359 B POSIF0_1_IRQHandler
\r
362 PUBWEAK BCCU0_0_IRQHandler
\r
363 SECTION .text:CODE:REORDER:NOROOT(1)
\r
365 B BCCU0_0_IRQHandler
\r
367 ; Definition of the default weak SystemInit_DAVE3 function
\r
368 ;If DAVE3 requires an extended SystemInit it will create its own version of
\r
369 ;SystemInit_DAVE3 which overrides this weak definition. Example includes
\r
370 ;setting up of external memory interfaces.
\r
372 PUBWEAK SystemInit_DAVE3
\r
373 SECTION .text:CODE:REORDER:NOROOT(2)
\r
378 ;Decision function queried by CMSIS startup for Clock tree setup ======== */
\r
379 ;In the absence of DAVE code engine, CMSIS SystemInit() must perform clock tree setup.
\r
380 ;This decision routine defined here will always return TRUE.
\r
381 ;When overridden by a definition defined in DAVE code engine, this routine
\r
382 ;returns FALSE indicating that the code engine has performed the clock setup
\r
384 PUBWEAK AllowClkInitByStartup
\r
385 SECTION .text:CODE:REORDER:NOROOT(2)
\r
386 AllowClkInitByStartup
\r