]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/startup/startup_lpc55s69_cm33_core0.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / startup / startup_lpc55s69_cm33_core0.c
1 //*****************************************************************************\r
2 // LPC55S69_cm33_core0 startup code for use with MCUXpresso IDE\r
3 //\r
4 // Version : 230919\r
5 //*****************************************************************************\r
6 //\r
7 // Copyright 2016-2019 NXP\r
8 // All rights reserved.\r
9 //\r
10 // SPDX-License-Identifier: BSD-3-Clause\r
11 //*****************************************************************************\r
12 \r
13 #if defined (DEBUG)\r
14 #pragma GCC push_options\r
15 #pragma GCC optimize ("Og")\r
16 #endif // (DEBUG)\r
17 \r
18 #if defined (__cplusplus)\r
19 #ifdef __REDLIB__\r
20 #error Redlib does not support C++\r
21 #else\r
22 //*****************************************************************************\r
23 //\r
24 // The entry point for the C++ library startup\r
25 //\r
26 //*****************************************************************************\r
27 extern "C" {\r
28     extern void __libc_init_array(void);\r
29 }\r
30 #endif\r
31 #endif\r
32 \r
33 #define WEAK __attribute__ ((weak))\r
34 #define WEAK_AV __attribute__ ((weak, section(".after_vectors")))\r
35 #define ALIAS(f) __attribute__ ((weak, alias (#f)))\r
36 \r
37 //*****************************************************************************\r
38 #if defined (__cplusplus)\r
39 extern "C" {\r
40 #endif\r
41 \r
42 //*****************************************************************************\r
43 // Variable to store CRP value in. Will be placed automatically\r
44 // by the linker when "Enable Code Read Protect" selected.\r
45 // See crp.h header for more information\r
46 //*****************************************************************************\r
47 //*****************************************************************************\r
48 // Declaration of external SystemInit function\r
49 //*****************************************************************************\r
50 #if defined (__USE_CMSIS)\r
51 extern void SystemInit(void);\r
52 #endif // (__USE_CMSIS)\r
53 \r
54 //*****************************************************************************\r
55 // Forward declaration of the core exception handlers.\r
56 // When the application defines a handler (with the same name), this will\r
57 // automatically take precedence over these weak definitions.\r
58 // If your application is a C++ one, then any interrupt handlers defined\r
59 // in C++ files within in your main application will need to have C linkage\r
60 // rather than C++ linkage. To do this, make sure that you are using extern "C"\r
61 // { .... } around the interrupt handler within your main application code.\r
62 //*****************************************************************************\r
63      void ResetISR(void);\r
64 WEAK void NMI_Handler(void);\r
65 WEAK void HardFault_Handler(void);\r
66 WEAK void MemManage_Handler(void);\r
67 WEAK void BusFault_Handler(void);\r
68 WEAK void UsageFault_Handler(void);\r
69 WEAK void SecureFault_Handler(void);\r
70 WEAK void SVC_Handler(void);\r
71 WEAK void DebugMon_Handler(void);\r
72 WEAK void PendSV_Handler(void);\r
73 WEAK void SysTick_Handler(void);\r
74 WEAK void IntDefaultHandler(void);\r
75 \r
76 //*****************************************************************************\r
77 // Forward declaration of the application IRQ handlers. When the application\r
78 // defines a handler (with the same name), this will automatically take\r
79 // precedence over weak definitions below\r
80 //*****************************************************************************\r
81 WEAK void WDT_BOD_IRQHandler(void);\r
82 WEAK void DMA0_IRQHandler(void);\r
83 WEAK void GINT0_IRQHandler(void);\r
84 WEAK void GINT1_IRQHandler(void);\r
85 WEAK void PIN_INT0_IRQHandler(void);\r
86 WEAK void PIN_INT1_IRQHandler(void);\r
87 WEAK void PIN_INT2_IRQHandler(void);\r
88 WEAK void PIN_INT3_IRQHandler(void);\r
89 WEAK void UTICK0_IRQHandler(void);\r
90 WEAK void MRT0_IRQHandler(void);\r
91 WEAK void CTIMER0_IRQHandler(void);\r
92 WEAK void CTIMER1_IRQHandler(void);\r
93 WEAK void SCT0_IRQHandler(void);\r
94 WEAK void CTIMER3_IRQHandler(void);\r
95 WEAK void FLEXCOMM0_IRQHandler(void);\r
96 WEAK void FLEXCOMM1_IRQHandler(void);\r
97 WEAK void FLEXCOMM2_IRQHandler(void);\r
98 WEAK void FLEXCOMM3_IRQHandler(void);\r
99 WEAK void FLEXCOMM4_IRQHandler(void);\r
100 WEAK void FLEXCOMM5_IRQHandler(void);\r
101 WEAK void FLEXCOMM6_IRQHandler(void);\r
102 WEAK void FLEXCOMM7_IRQHandler(void);\r
103 WEAK void ADC0_IRQHandler(void);\r
104 WEAK void Reserved39_IRQHandler(void);\r
105 WEAK void ACMP_IRQHandler(void);\r
106 WEAK void Reserved41_IRQHandler(void);\r
107 WEAK void Reserved42_IRQHandler(void);\r
108 WEAK void USB0_NEEDCLK_IRQHandler(void);\r
109 WEAK void USB0_IRQHandler(void);\r
110 WEAK void RTC_IRQHandler(void);\r
111 WEAK void Reserved46_IRQHandler(void);\r
112 WEAK void MAILBOX_IRQHandler(void);\r
113 WEAK void PIN_INT4_IRQHandler(void);\r
114 WEAK void PIN_INT5_IRQHandler(void);\r
115 WEAK void PIN_INT6_IRQHandler(void);\r
116 WEAK void PIN_INT7_IRQHandler(void);\r
117 WEAK void CTIMER2_IRQHandler(void);\r
118 WEAK void CTIMER4_IRQHandler(void);\r
119 WEAK void OS_EVENT_IRQHandler(void);\r
120 WEAK void Reserved55_IRQHandler(void);\r
121 WEAK void Reserved56_IRQHandler(void);\r
122 WEAK void Reserved57_IRQHandler(void);\r
123 WEAK void SDIO_IRQHandler(void);\r
124 WEAK void Reserved59_IRQHandler(void);\r
125 WEAK void Reserved60_IRQHandler(void);\r
126 WEAK void Reserved61_IRQHandler(void);\r
127 WEAK void USB1_PHY_IRQHandler(void);\r
128 WEAK void USB1_IRQHandler(void);\r
129 WEAK void USB1_NEEDCLK_IRQHandler(void);\r
130 WEAK void SEC_HYPERVISOR_CALL_IRQHandler(void);\r
131 WEAK void SEC_GPIO_INT0_IRQ0_IRQHandler(void);\r
132 WEAK void SEC_GPIO_INT0_IRQ1_IRQHandler(void);\r
133 WEAK void PLU_IRQHandler(void);\r
134 WEAK void SEC_VIO_IRQHandler(void);\r
135 WEAK void HASHCRYPT_IRQHandler(void);\r
136 WEAK void CASER_IRQHandler(void);\r
137 WEAK void PUF_IRQHandler(void);\r
138 WEAK void PQ_IRQHandler(void);\r
139 WEAK void DMA1_IRQHandler(void);\r
140 WEAK void FLEXCOMM8_IRQHandler(void);\r
141 \r
142 //*****************************************************************************\r
143 // Forward declaration of the driver IRQ handlers. These are aliased\r
144 // to the IntDefaultHandler, which is a 'forever' loop. When the driver\r
145 // defines a handler (with the same name), this will automatically take\r
146 // precedence over these weak definitions\r
147 //*****************************************************************************\r
148 void WDT_BOD_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
149 void DMA0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
150 void GINT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
151 void GINT1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
152 void PIN_INT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
153 void PIN_INT1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
154 void PIN_INT2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
155 void PIN_INT3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
156 void UTICK0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
157 void MRT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
158 void CTIMER0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
159 void CTIMER1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
160 void SCT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
161 void CTIMER3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
162 void FLEXCOMM0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
163 void FLEXCOMM1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
164 void FLEXCOMM2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
165 void FLEXCOMM3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
166 void FLEXCOMM4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
167 void FLEXCOMM5_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
168 void FLEXCOMM6_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
169 void FLEXCOMM7_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
170 void ADC0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
171 void Reserved39_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
172 void ACMP_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
173 void Reserved41_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
174 void Reserved42_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
175 void USB0_NEEDCLK_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
176 void USB0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
177 void RTC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
178 void Reserved46_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
179 void MAILBOX_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
180 void PIN_INT4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
181 void PIN_INT5_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
182 void PIN_INT6_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
183 void PIN_INT7_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
184 void CTIMER2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
185 void CTIMER4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
186 void OS_EVENT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
187 void Reserved55_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
188 void Reserved56_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
189 void Reserved57_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
190 void SDIO_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
191 void Reserved59_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
192 void Reserved60_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
193 void Reserved61_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
194 void USB1_PHY_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
195 void USB1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
196 void USB1_NEEDCLK_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
197 void SEC_HYPERVISOR_CALL_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
198 void SEC_GPIO_INT0_IRQ0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
199 void SEC_GPIO_INT0_IRQ1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
200 void PLU_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
201 void SEC_VIO_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
202 void HASHCRYPT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
203 void CASER_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
204 void PUF_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
205 void PQ_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
206 void DMA1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
207 void FLEXCOMM8_DriverIRQHandler(void) ALIAS(IntDefaultHandler);\r
208 \r
209 //*****************************************************************************\r
210 // The entry point for the application.\r
211 // __main() is the entry point for Redlib based applications\r
212 // main() is the entry point for Newlib based applications\r
213 //*****************************************************************************\r
214 #if defined (__REDLIB__)\r
215 extern void __main(void);\r
216 #endif\r
217 extern int main(void);\r
218 \r
219 //*****************************************************************************\r
220 // External declaration for the pointer to the stack top from the Linker Script\r
221 //*****************************************************************************\r
222 extern void _vStackTop(void);\r
223 //*****************************************************************************\r
224 // External declaration for LPC MCU vector table checksum from  Linker Script\r
225 //*****************************************************************************\r
226 WEAK extern void __valid_user_code_checksum();\r
227 \r
228 //*****************************************************************************\r
229 //*****************************************************************************\r
230 #if defined (__cplusplus)\r
231 } // extern "C"\r
232 #endif\r
233 //*****************************************************************************\r
234 // The vector table.\r
235 // This relies on the linker script to place at correct location in memory.\r
236 //*****************************************************************************\r
237 extern void (* const g_pfnVectors[])(void);\r
238 extern void * __Vectors __attribute__ ((alias ("g_pfnVectors")));\r
239 \r
240 __attribute__ ((used, section(".isr_vector")))\r
241 void (* const g_pfnVectors[])(void) = {\r
242     // Core Level - CM33\r
243     &_vStackTop,                       // The initial stack pointer\r
244     ResetISR,                          // The reset handler\r
245     NMI_Handler,                       // The NMI handler\r
246     HardFault_Handler,                 // The hard fault handler\r
247     MemManage_Handler,                 // The MPU fault handler\r
248     BusFault_Handler,                  // The bus fault handler\r
249     UsageFault_Handler,                // The usage fault handler\r
250     SecureFault_Handler,               // The secure fault handler\r
251     0,                                 // ECRP\r
252     0,                                 // Reserved\r
253     0,                                 // Reserved\r
254     SVC_Handler,                       // SVCall handler\r
255     DebugMon_Handler,                  // Debug monitor handler\r
256     0,                                 // Reserved\r
257     PendSV_Handler,                    // The PendSV handler\r
258     SysTick_Handler,                   // The SysTick handler\r
259 \r
260     // Chip Level - LPC55S69_cm33_core0\r
261     WDT_BOD_IRQHandler,              // 16: Windowed watchdog timer, Brownout detect, Flash interrupt\r
262     DMA0_IRQHandler,                 // 17: DMA0 controller\r
263     GINT0_IRQHandler,                // 18: GPIO group 0\r
264     GINT1_IRQHandler,                // 19: GPIO group 1\r
265     PIN_INT0_IRQHandler,             // 20: Pin interrupt 0 or pattern match engine slice 0\r
266     PIN_INT1_IRQHandler,             // 21: Pin interrupt 1or pattern match engine slice 1\r
267     PIN_INT2_IRQHandler,             // 22: Pin interrupt 2 or pattern match engine slice 2\r
268     PIN_INT3_IRQHandler,             // 23: Pin interrupt 3 or pattern match engine slice 3\r
269     UTICK0_IRQHandler,               // 24: Micro-tick Timer\r
270     MRT0_IRQHandler,                 // 25: Multi-rate timer\r
271     CTIMER0_IRQHandler,              // 26: Standard counter/timer CTIMER0\r
272     CTIMER1_IRQHandler,              // 27: Standard counter/timer CTIMER1\r
273     SCT0_IRQHandler,                 // 28: SCTimer/PWM\r
274     CTIMER3_IRQHandler,              // 29: Standard counter/timer CTIMER3\r
275     FLEXCOMM0_IRQHandler,            // 30: Flexcomm Interface 0 (USART, SPI, I2C, I2S, FLEXCOMM)\r
276     FLEXCOMM1_IRQHandler,            // 31: Flexcomm Interface 1 (USART, SPI, I2C, I2S, FLEXCOMM)\r
277     FLEXCOMM2_IRQHandler,            // 32: Flexcomm Interface 2 (USART, SPI, I2C, I2S, FLEXCOMM)\r
278     FLEXCOMM3_IRQHandler,            // 33: Flexcomm Interface 3 (USART, SPI, I2C, I2S, FLEXCOMM)\r
279     FLEXCOMM4_IRQHandler,            // 34: Flexcomm Interface 4 (USART, SPI, I2C, I2S, FLEXCOMM)\r
280     FLEXCOMM5_IRQHandler,            // 35: Flexcomm Interface 5 (USART, SPI, I2C, I2S, FLEXCOMM)\r
281     FLEXCOMM6_IRQHandler,            // 36: Flexcomm Interface 6 (USART, SPI, I2C, I2S, FLEXCOMM)\r
282     FLEXCOMM7_IRQHandler,            // 37: Flexcomm Interface 7 (USART, SPI, I2C, I2S, FLEXCOMM)\r
283     ADC0_IRQHandler,                 // 38: ADC0\r
284     Reserved39_IRQHandler,           // 39: Reserved interrupt\r
285     ACMP_IRQHandler,                 // 40: ACMP  interrupts\r
286     Reserved41_IRQHandler,           // 41: Reserved interrupt\r
287     Reserved42_IRQHandler,           // 42: Reserved interrupt\r
288     USB0_NEEDCLK_IRQHandler,         // 43: USB Activity Wake-up Interrupt\r
289     USB0_IRQHandler,                 // 44: USB device\r
290     RTC_IRQHandler,                  // 45: RTC alarm and wake-up interrupts\r
291     Reserved46_IRQHandler,           // 46: Reserved interrupt\r
292     MAILBOX_IRQHandler,              // 47: WAKEUP,Mailbox interrupt (present on selected devices)\r
293     PIN_INT4_IRQHandler,             // 48: Pin interrupt 4 or pattern match engine slice 4 int\r
294     PIN_INT5_IRQHandler,             // 49: Pin interrupt 5 or pattern match engine slice 5 int\r
295     PIN_INT6_IRQHandler,             // 50: Pin interrupt 6 or pattern match engine slice 6 int\r
296     PIN_INT7_IRQHandler,             // 51: Pin interrupt 7 or pattern match engine slice 7 int\r
297     CTIMER2_IRQHandler,              // 52: Standard counter/timer CTIMER2\r
298     CTIMER4_IRQHandler,              // 53: Standard counter/timer CTIMER4\r
299     OS_EVENT_IRQHandler,             // 54: OSEVTIMER0 and OSEVTIMER0_WAKEUP interrupts\r
300     Reserved55_IRQHandler,           // 55: Reserved interrupt\r
301     Reserved56_IRQHandler,           // 56: Reserved interrupt\r
302     Reserved57_IRQHandler,           // 57: Reserved interrupt\r
303     SDIO_IRQHandler,                 // 58: SD/MMC\r
304     Reserved59_IRQHandler,           // 59: Reserved interrupt\r
305     Reserved60_IRQHandler,           // 60: Reserved interrupt\r
306     Reserved61_IRQHandler,           // 61: Reserved interrupt\r
307     USB1_PHY_IRQHandler,             // 62: USB1_PHY\r
308     USB1_IRQHandler,                 // 63: USB1 interrupt\r
309     USB1_NEEDCLK_IRQHandler,         // 64: USB1 activity\r
310     SEC_HYPERVISOR_CALL_IRQHandler,  // 65: SEC_HYPERVISOR_CALL interrupt\r
311     SEC_GPIO_INT0_IRQ0_IRQHandler,   // 66: SEC_GPIO_INT0_IRQ0 interrupt\r
312     SEC_GPIO_INT0_IRQ1_IRQHandler,   // 67: SEC_GPIO_INT0_IRQ1 interrupt\r
313     PLU_IRQHandler,                  // 68: PLU interrupt\r
314     SEC_VIO_IRQHandler,              // 69: SEC_VIO interrupt\r
315     HASHCRYPT_IRQHandler,            // 70: HASHCRYPT interrupt\r
316     CASER_IRQHandler,                // 71: CASPER interrupt\r
317     PUF_IRQHandler,                  // 72: PUF interrupt\r
318     PQ_IRQHandler,                   // 73: PQ interrupt\r
319     DMA1_IRQHandler,                 // 74: DMA1 interrupt\r
320     FLEXCOMM8_IRQHandler,            // 75: Flexcomm Interface 8 (SPI, , FLEXCOMM)\r
321 \r
322 }; /* End of g_pfnVectors */\r
323 \r
324 //*****************************************************************************\r
325 // Functions to carry out the initialization of RW and BSS data sections. These\r
326 // are written as separate functions rather than being inlined within the\r
327 // ResetISR() function in order to cope with MCUs with multiple banks of\r
328 // memory.\r
329 //*****************************************************************************\r
330 __attribute__ ((section(".after_vectors.init_data")))\r
331 void data_init(unsigned int romstart, unsigned int start, unsigned int len) {\r
332     unsigned int *pulDest = (unsigned int*) start;\r
333     unsigned int *pulSrc = (unsigned int*) romstart;\r
334     unsigned int loop;\r
335     for (loop = 0; loop < len; loop = loop + 4)\r
336         *pulDest++ = *pulSrc++;\r
337 }\r
338 \r
339 __attribute__ ((section(".after_vectors.init_bss")))\r
340 void bss_init(unsigned int start, unsigned int len) {\r
341     unsigned int *pulDest = (unsigned int*) start;\r
342     unsigned int loop;\r
343     for (loop = 0; loop < len; loop = loop + 4)\r
344         *pulDest++ = 0;\r
345 }\r
346 \r
347 //*****************************************************************************\r
348 // The following symbols are constructs generated by the linker, indicating\r
349 // the location of various points in the "Global Section Table". This table is\r
350 // created by the linker via the Code Red managed linker script mechanism. It\r
351 // contains the load address, execution address and length of each RW data\r
352 // section and the execution and length of each BSS (zero initialized) section.\r
353 //*****************************************************************************\r
354 extern unsigned int __data_section_table;\r
355 extern unsigned int __data_section_table_end;\r
356 extern unsigned int __bss_section_table;\r
357 extern unsigned int __bss_section_table_end;\r
358 \r
359 //*****************************************************************************\r
360 // Reset entry point for your code.\r
361 // Sets up a simple runtime environment and initializes the C/C++\r
362 // library.\r
363 //*****************************************************************************\r
364 __attribute__ ((section(".after_vectors.reset")))\r
365 void ResetISR(void) {\r
366 \r
367     // Disable interrupts\r
368     __asm volatile ("cpsid i");\r
369 \r
370 \r
371 \r
372 #if defined (__USE_CMSIS)\r
373 // If __USE_CMSIS defined, then call CMSIS SystemInit code\r
374     SystemInit();\r
375 \r
376 #endif // (__USE_CMSIS)\r
377 \r
378     //\r
379     // Copy the data sections from flash to SRAM.\r
380     //\r
381     unsigned int LoadAddr, ExeAddr, SectionLen;\r
382     unsigned int *SectionTableAddr;\r
383 \r
384     // Load base address of Global Section Table\r
385     SectionTableAddr = &__data_section_table;\r
386 \r
387     // Copy the data sections from flash to SRAM.\r
388     while (SectionTableAddr < &__data_section_table_end) {\r
389         LoadAddr = *SectionTableAddr++;\r
390         ExeAddr = *SectionTableAddr++;\r
391         SectionLen = *SectionTableAddr++;\r
392         data_init(LoadAddr, ExeAddr, SectionLen);\r
393     }\r
394 \r
395     // At this point, SectionTableAddr = &__bss_section_table;\r
396     // Zero fill the bss segment\r
397     while (SectionTableAddr < &__bss_section_table_end) {\r
398         ExeAddr = *SectionTableAddr++;\r
399         SectionLen = *SectionTableAddr++;\r
400         bss_init(ExeAddr, SectionLen);\r
401     }\r
402 \r
403 \r
404 #if !defined (__USE_CMSIS)\r
405 // Assume that if __USE_CMSIS defined, then CMSIS SystemInit code\r
406 // will setup the VTOR register\r
407 \r
408     // Check to see if we are running the code from a non-zero\r
409     // address (eg RAM, external flash), in which case we need\r
410     // to modify the VTOR register to tell the CPU that the\r
411     // vector table is located at a non-0x0 address.\r
412     unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08;\r
413     if ((unsigned int *)g_pfnVectors!=(unsigned int *) 0x00000000) {\r
414         *pSCB_VTOR = (unsigned int)g_pfnVectors;\r
415     }\r
416 #endif // (__USE_CMSIS)\r
417 #if defined (__cplusplus)\r
418     //\r
419     // Call C++ library initialisation\r
420     //\r
421     __libc_init_array();\r
422 #endif\r
423 \r
424     // Reenable interrupts\r
425     __asm volatile ("cpsie i");\r
426 \r
427 #if defined (__REDLIB__)\r
428     // Call the Redlib library, which in turn calls main()\r
429     __main();\r
430 #else\r
431     main();\r
432 #endif\r
433 \r
434     //\r
435     // main() shouldn't return, but if it does, we'll just enter an infinite loop\r
436     //\r
437     while (1) {\r
438         ;\r
439     }\r
440 }\r
441 \r
442 //*****************************************************************************\r
443 // Default core exception handlers. Override the ones here by defining your own\r
444 // handler routines in your application code.\r
445 //*****************************************************************************\r
446 WEAK_AV void NMI_Handler(void)\r
447 { while(1) {}\r
448 }\r
449 \r
450 WEAK_AV void HardFault_Handler(void)\r
451 { while(1) {}\r
452 }\r
453 \r
454 WEAK_AV void MemManage_Handler(void)\r
455 { while(1) {}\r
456 }\r
457 \r
458 WEAK_AV void BusFault_Handler(void)\r
459 { while(1) {}\r
460 }\r
461 \r
462 WEAK_AV void UsageFault_Handler(void)\r
463 { while(1) {}\r
464 }\r
465 \r
466 WEAK_AV void SecureFault_Handler(void)\r
467 { while(1) {}\r
468 }\r
469 \r
470 WEAK_AV void SVC_Handler(void)\r
471 { while(1) {}\r
472 }\r
473 \r
474 WEAK_AV void DebugMon_Handler(void)\r
475 { while(1) {}\r
476 }\r
477 \r
478 WEAK_AV void PendSV_Handler(void)\r
479 { while(1) {}\r
480 }\r
481 \r
482 WEAK_AV void SysTick_Handler(void)\r
483 { while(1) {}\r
484 }\r
485 \r
486 //*****************************************************************************\r
487 // Processor ends up here if an unexpected interrupt occurs or a specific\r
488 // handler is not present in the application code.\r
489 //*****************************************************************************\r
490 WEAK_AV void IntDefaultHandler(void)\r
491 { while(1) {}\r
492 }\r
493 \r
494 //*****************************************************************************\r
495 // Default application exception handlers. Override the ones here by defining\r
496 // your own handler routines in your application code. These routines call\r
497 // driver exception handlers or IntDefaultHandler() if no driver exception\r
498 // handler is included.\r
499 //*****************************************************************************\r
500 WEAK void WDT_BOD_IRQHandler(void)\r
501 {   WDT_BOD_DriverIRQHandler();\r
502 }\r
503 \r
504 WEAK void DMA0_IRQHandler(void)\r
505 {   DMA0_DriverIRQHandler();\r
506 }\r
507 \r
508 WEAK void GINT0_IRQHandler(void)\r
509 {   GINT0_DriverIRQHandler();\r
510 }\r
511 \r
512 WEAK void GINT1_IRQHandler(void)\r
513 {   GINT1_DriverIRQHandler();\r
514 }\r
515 \r
516 WEAK void PIN_INT0_IRQHandler(void)\r
517 {   PIN_INT0_DriverIRQHandler();\r
518 }\r
519 \r
520 WEAK void PIN_INT1_IRQHandler(void)\r
521 {   PIN_INT1_DriverIRQHandler();\r
522 }\r
523 \r
524 WEAK void PIN_INT2_IRQHandler(void)\r
525 {   PIN_INT2_DriverIRQHandler();\r
526 }\r
527 \r
528 WEAK void PIN_INT3_IRQHandler(void)\r
529 {   PIN_INT3_DriverIRQHandler();\r
530 }\r
531 \r
532 WEAK void UTICK0_IRQHandler(void)\r
533 {   UTICK0_DriverIRQHandler();\r
534 }\r
535 \r
536 WEAK void MRT0_IRQHandler(void)\r
537 {   MRT0_DriverIRQHandler();\r
538 }\r
539 \r
540 WEAK void CTIMER0_IRQHandler(void)\r
541 {   CTIMER0_DriverIRQHandler();\r
542 }\r
543 \r
544 WEAK void CTIMER1_IRQHandler(void)\r
545 {   CTIMER1_DriverIRQHandler();\r
546 }\r
547 \r
548 WEAK void SCT0_IRQHandler(void)\r
549 {   SCT0_DriverIRQHandler();\r
550 }\r
551 \r
552 WEAK void CTIMER3_IRQHandler(void)\r
553 {   CTIMER3_DriverIRQHandler();\r
554 }\r
555 \r
556 WEAK void FLEXCOMM0_IRQHandler(void)\r
557 {   FLEXCOMM0_DriverIRQHandler();\r
558 }\r
559 \r
560 WEAK void FLEXCOMM1_IRQHandler(void)\r
561 {   FLEXCOMM1_DriverIRQHandler();\r
562 }\r
563 \r
564 WEAK void FLEXCOMM2_IRQHandler(void)\r
565 {   FLEXCOMM2_DriverIRQHandler();\r
566 }\r
567 \r
568 WEAK void FLEXCOMM3_IRQHandler(void)\r
569 {   FLEXCOMM3_DriverIRQHandler();\r
570 }\r
571 \r
572 WEAK void FLEXCOMM4_IRQHandler(void)\r
573 {   FLEXCOMM4_DriverIRQHandler();\r
574 }\r
575 \r
576 WEAK void FLEXCOMM5_IRQHandler(void)\r
577 {   FLEXCOMM5_DriverIRQHandler();\r
578 }\r
579 \r
580 WEAK void FLEXCOMM6_IRQHandler(void)\r
581 {   FLEXCOMM6_DriverIRQHandler();\r
582 }\r
583 \r
584 WEAK void FLEXCOMM7_IRQHandler(void)\r
585 {   FLEXCOMM7_DriverIRQHandler();\r
586 }\r
587 \r
588 WEAK void ADC0_IRQHandler(void)\r
589 {   ADC0_DriverIRQHandler();\r
590 }\r
591 \r
592 WEAK void Reserved39_IRQHandler(void)\r
593 {   Reserved39_DriverIRQHandler();\r
594 }\r
595 \r
596 WEAK void ACMP_IRQHandler(void)\r
597 {   ACMP_DriverIRQHandler();\r
598 }\r
599 \r
600 WEAK void Reserved41_IRQHandler(void)\r
601 {   Reserved41_DriverIRQHandler();\r
602 }\r
603 \r
604 WEAK void Reserved42_IRQHandler(void)\r
605 {   Reserved42_DriverIRQHandler();\r
606 }\r
607 \r
608 WEAK void USB0_NEEDCLK_IRQHandler(void)\r
609 {   USB0_NEEDCLK_DriverIRQHandler();\r
610 }\r
611 \r
612 WEAK void USB0_IRQHandler(void)\r
613 {   USB0_DriverIRQHandler();\r
614 }\r
615 \r
616 WEAK void RTC_IRQHandler(void)\r
617 {   RTC_DriverIRQHandler();\r
618 }\r
619 \r
620 WEAK void Reserved46_IRQHandler(void)\r
621 {   Reserved46_DriverIRQHandler();\r
622 }\r
623 \r
624 WEAK void MAILBOX_IRQHandler(void)\r
625 {   MAILBOX_DriverIRQHandler();\r
626 }\r
627 \r
628 WEAK void PIN_INT4_IRQHandler(void)\r
629 {   PIN_INT4_DriverIRQHandler();\r
630 }\r
631 \r
632 WEAK void PIN_INT5_IRQHandler(void)\r
633 {   PIN_INT5_DriverIRQHandler();\r
634 }\r
635 \r
636 WEAK void PIN_INT6_IRQHandler(void)\r
637 {   PIN_INT6_DriverIRQHandler();\r
638 }\r
639 \r
640 WEAK void PIN_INT7_IRQHandler(void)\r
641 {   PIN_INT7_DriverIRQHandler();\r
642 }\r
643 \r
644 WEAK void CTIMER2_IRQHandler(void)\r
645 {   CTIMER2_DriverIRQHandler();\r
646 }\r
647 \r
648 WEAK void CTIMER4_IRQHandler(void)\r
649 {   CTIMER4_DriverIRQHandler();\r
650 }\r
651 \r
652 WEAK void OS_EVENT_IRQHandler(void)\r
653 {   OS_EVENT_DriverIRQHandler();\r
654 }\r
655 \r
656 WEAK void Reserved55_IRQHandler(void)\r
657 {   Reserved55_DriverIRQHandler();\r
658 }\r
659 \r
660 WEAK void Reserved56_IRQHandler(void)\r
661 {   Reserved56_DriverIRQHandler();\r
662 }\r
663 \r
664 WEAK void Reserved57_IRQHandler(void)\r
665 {   Reserved57_DriverIRQHandler();\r
666 }\r
667 \r
668 WEAK void SDIO_IRQHandler(void)\r
669 {   SDIO_DriverIRQHandler();\r
670 }\r
671 \r
672 WEAK void Reserved59_IRQHandler(void)\r
673 {   Reserved59_DriverIRQHandler();\r
674 }\r
675 \r
676 WEAK void Reserved60_IRQHandler(void)\r
677 {   Reserved60_DriverIRQHandler();\r
678 }\r
679 \r
680 WEAK void Reserved61_IRQHandler(void)\r
681 {   Reserved61_DriverIRQHandler();\r
682 }\r
683 \r
684 WEAK void USB1_PHY_IRQHandler(void)\r
685 {   USB1_PHY_DriverIRQHandler();\r
686 }\r
687 \r
688 WEAK void USB1_IRQHandler(void)\r
689 {   USB1_DriverIRQHandler();\r
690 }\r
691 \r
692 WEAK void USB1_NEEDCLK_IRQHandler(void)\r
693 {   USB1_NEEDCLK_DriverIRQHandler();\r
694 }\r
695 \r
696 WEAK void SEC_HYPERVISOR_CALL_IRQHandler(void)\r
697 {   SEC_HYPERVISOR_CALL_DriverIRQHandler();\r
698 }\r
699 \r
700 WEAK void SEC_GPIO_INT0_IRQ0_IRQHandler(void)\r
701 {   SEC_GPIO_INT0_IRQ0_DriverIRQHandler();\r
702 }\r
703 \r
704 WEAK void SEC_GPIO_INT0_IRQ1_IRQHandler(void)\r
705 {   SEC_GPIO_INT0_IRQ1_DriverIRQHandler();\r
706 }\r
707 \r
708 WEAK void PLU_IRQHandler(void)\r
709 {   PLU_DriverIRQHandler();\r
710 }\r
711 \r
712 WEAK void SEC_VIO_IRQHandler(void)\r
713 {   SEC_VIO_DriverIRQHandler();\r
714 }\r
715 \r
716 WEAK void HASHCRYPT_IRQHandler(void)\r
717 {   HASHCRYPT_DriverIRQHandler();\r
718 }\r
719 \r
720 WEAK void CASER_IRQHandler(void)\r
721 {   CASER_DriverIRQHandler();\r
722 }\r
723 \r
724 WEAK void PUF_IRQHandler(void)\r
725 {   PUF_DriverIRQHandler();\r
726 }\r
727 \r
728 WEAK void PQ_IRQHandler(void)\r
729 {   PQ_DriverIRQHandler();\r
730 }\r
731 \r
732 WEAK void DMA1_IRQHandler(void)\r
733 {   DMA1_DriverIRQHandler();\r
734 }\r
735 \r
736 WEAK void FLEXCOMM8_IRQHandler(void)\r
737 {   FLEXCOMM8_DriverIRQHandler();\r
738 }\r
739 \r
740 //*****************************************************************************\r
741 \r
742 #if defined (DEBUG)\r
743 #pragma GCC pop_options\r
744 #endif // (DEBUG)\r