1 /******************************************************************************
2 *
3 * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 *  Redistributions of source code must retain the above copyright
10 *  notice, this list of conditions and the following disclaimer.
11 *
12 *  Redistributions in binary form must reproduce the above copyright
13 *  notice, this list of conditions and the following disclaimer in the
14 *  documentation and/or other materials provided with the
15 *  distribution.
16 *
17 *  Neither the name of Texas Instruments Incorporated nor the names of
18 *  its contributors may be used to endorse or promote products derived
19 *  from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 *
33  *****************************************************************************/
34 
35 #include <stdint.h>
36 
37 #ifndef HWREG
38     #define HWREG(x) (*((volatile uint32_t *)(x)))
39 #endif
40 
41 /* Reserve space for the system stack.                      */
42 extern uint32_t __StackTop;
43 typedef void(*pFunc)(void);
44 
45 /* Entry point for the application.                         */
46 extern int _mainCRTStartup();
47 
48 /* External declaration for system initialization function  */
49 extern void SystemInit(void);
50 
51 /* Forward declaration of the default fault handlers.       */
52 void Default_Handler(void) __attribute__((weak));
53 extern void Reset_Handler(void) __attribute__((weak));
54 
55 /* Cortex-M4 Processor Exceptions */
56 extern void NMI_Handler(void) __attribute__((weak, alias("Default_Handler")));
57 extern void HardFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
58 extern void MemManage_Handler(void) __attribute__((weak, alias("Default_Handler")));
59 extern void BusFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
60 extern void UsageFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
61 extern void SVC_Handler(void) __attribute__((weak, alias("Default_Handler")));
62 extern void DebugMon_Handler(void) __attribute__((weak, alias("Default_Handler")));
63 extern void PendSV_Handler(void) __attribute__((weak, alias("Default_Handler")));
64 extern void SysTick_Handler(void) __attribute__((weak, alias("Default_Handler")));
65 
66 /* device specific interrupt handler */
67 extern void GPIOA_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
68 extern void GPIOB_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
69 extern void GPIOC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
70 extern void GPIOD_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
71 extern void GPIOE_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
72 extern void UART0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
73 extern void UART1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
74 extern void SSI0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
75 extern void I2C0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
76 extern void PWM0_FAULT_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
77 extern void PWM0_0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
78 extern void PWM0_1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
79 extern void PWM0_2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
80 extern void QEI0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
81 extern void ADC0SS0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
82 extern void ADC0SS1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
83 extern void ADC0SS2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
84 extern void ADC0SS3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
85 extern void WATCHDOG_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
86 extern void TIMER0A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
87 extern void TIMER0B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
88 extern void TIMER1A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
89 extern void TIMER1B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
90 extern void TIMER2A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
91 extern void TIMER2B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
92 extern void COMP0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
93 extern void COMP1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
94 extern void COMP2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
95 extern void SYSCTL_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
96 extern void FLASH_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
97 extern void GPIOF_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
98 extern void GPIOG_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
99 extern void GPIOH_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
100 extern void UART2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
101 extern void SSI1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
102 extern void TIMER3A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
103 extern void TIMER3B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
104 extern void I2C1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
105 extern void CAN0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
106 extern void CAN1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
107 extern void EMAC0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
108 extern void HIBERNATE_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
109 extern void USB0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
110 extern void PWM0_3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
111 extern void UDMA_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
112 extern void UDMAERR_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
113 extern void ADC1SS0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
114 extern void ADC1SS1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
115 extern void ADC1SS2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
116 extern void ADC1SS3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
117 extern void EPI0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
118 extern void GPIOJ_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
119 extern void GPIOK_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
120 extern void GPIOL_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
121 extern void SSI2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
122 extern void SSI3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
123 extern void UART3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
124 extern void UART4_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
125 extern void UART5_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
126 extern void UART6_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
127 extern void UART7_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
128 extern void I2C2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
129 extern void I2C3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
130 extern void TIMER4A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
131 extern void TIMER4B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
132 extern void TIMER5A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
133 extern void TIMER5B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
134 extern void SYSEXC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
135 extern void I2C4_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
136 extern void I2C5_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
137 extern void GPIOM_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
138 extern void GPION_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
139 extern void TAMPER0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
140 extern void GPIOP0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
141 extern void GPIOP1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
142 extern void GPIOP2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
143 extern void GPIOP3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
144 extern void GPIOP4_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
145 extern void GPIOP5_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
146 extern void GPIOP6_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
147 extern void GPIOP7_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
148 extern void GPIOQ0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
149 extern void GPIOQ1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
150 extern void GPIOQ2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
151 extern void GPIOQ3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
152 extern void GPIOQ4_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
153 extern void GPIOQ5_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
154 extern void GPIOQ6_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
155 extern void GPIOQ7_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
156 extern void GPIOR_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
157 extern void GPIOS_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
158 extern void SHA0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
159 extern void AES0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
160 extern void DES0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
161 extern void LCD0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
162 extern void TIMER6A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
163 extern void TIMER6B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
164 extern void TIMER7A_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
165 extern void TIMER7B_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
166 extern void I2C6_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
167 extern void I2C7_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
168 extern void ONEWIRE0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
169 extern void I2C8_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
170 extern void I2C9_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
171 extern void GPIOT_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
172 
173 
174 /* The vector table.  Note that the proper constructs must be placed on this to */
175 /* ensure that it ends up at physical address 0x0000.0000 or at the start of    */
176 /* the program if located at a start address other than 0.                      */
177 
178 void (* const interruptVectors[])(void) __attribute__((section(".intvecs"))) =
179 {
180     (pFunc) &__StackTop,
181     /* The initial stack pointer */
182     Reset_Handler,                          /* The reset handler         */
183     NMI_Handler,                            /* The NMI handler           */
184     HardFault_Handler,                      /* The hard fault handler    */
185     MemManage_Handler,                      /* The MPU fault handler     */
186     BusFault_Handler,                       /* The bus fault handler     */
187     UsageFault_Handler,                     /* The usage fault handler   */
188     0,                                      /* Reserved                  */
189     0,                                      /* Reserved                  */
190     0,                                      /* Reserved                  */
191     0,                                      /* Reserved                  */
192     SVC_Handler,                            /* SVCall handler            */
193     DebugMon_Handler,                       /* Debug monitor handler     */
194     0,                                      /* Reserved                  */
195     PendSV_Handler,                         /* The PendSV handler        */
196     SysTick_Handler,                        /* The SysTick handler       */
197     GPIOA_IRQHandler,                       /* GPIO Port A               */
198     GPIOB_IRQHandler,                       /* GPIO Port B               */
199     GPIOC_IRQHandler,                       /* GPIO Port C               */
200     GPIOD_IRQHandler,                       /* GPIO Port D               */
201     GPIOE_IRQHandler,                       /* GPIO Port E               */
202     UART0_IRQHandler,                       /* UART0 Rx and Tx           */
203     UART1_IRQHandler,                       /* UART1 Rx and Tx           */
204     SSI0_IRQHandler,                        /* SSI0 Rx and Tx            */
205     I2C0_IRQHandler,                        /* I2C0 Master and Slave     */
206     PWM0_FAULT_IRQHandler,                  /* PWM Fault                 */
207     PWM0_0_IRQHandler,                      /* PWM Generator 0           */
208     PWM0_1_IRQHandler,                      /* PWM Generator 1           */
209     PWM0_2_IRQHandler,                      /* PWM Generator 2           */
210     QEI0_IRQHandler,                        /* Quadrature Encoder 0      */
211     ADC0SS0_IRQHandler,                     /* ADC Sequence 0            */
212     ADC0SS1_IRQHandler,                     /* ADC Sequence 1            */
213     ADC0SS2_IRQHandler,                     /* ADC Sequence 2            */
214     ADC0SS3_IRQHandler,                     /* ADC Sequence 3            */
215     WATCHDOG_IRQHandler,                    /* Watchdog timer            */
216     TIMER0A_IRQHandler,                     /* Timer 0 subtimer A        */
217     TIMER0B_IRQHandler,                     /* Timer 0 subtimer B        */
218     TIMER1A_IRQHandler,                     /* Timer 1 subtimer A        */
219     TIMER1B_IRQHandler,                     /* Timer 1 subtimer B        */
220     TIMER2A_IRQHandler,                     /* Timer 2 subtimer A        */
221     TIMER2B_IRQHandler,                     /* Timer 2 subtimer B        */
222     COMP0_IRQHandler,                       /* Analog Comparator 0       */
223     COMP1_IRQHandler,                       /* Analog Comparator 1       */
224     COMP2_IRQHandler,                       /* Analog Comparator 2       */
225     SYSCTL_IRQHandler,                      /* System Control            */
226     FLASH_IRQHandler,                       /* FLASH Control             */
227     GPIOF_IRQHandler,                       /* GPIO Port F               */
228     GPIOG_IRQHandler,                       /* GPIO Port G               */
229     GPIOH_IRQHandler,                       /* GPIO Port H               */
230     UART2_IRQHandler,                       /* UART2 Rx and Tx           */
231     SSI1_IRQHandler,                        /* SSI1 Rx and Tx            */
232     TIMER3A_IRQHandler,                     /* Timer 3 subtimer A        */
233     TIMER3B_IRQHandler,                     /* Timer 3 subtimer B        */
234     I2C1_IRQHandler,                        /* I2C1 Master and Slave     */
235     CAN0_IRQHandler,                        /* CAN0                      */
236     CAN1_IRQHandler,                        /* CAN1                      */
237     EMAC0_IRQHandler,                       /* Ethernet                  */
238     HIBERNATE_IRQHandler,                   /* Hibernate                 */
239     USB0_IRQHandler,                        /* USB0                      */
240     PWM0_3_IRQHandler,                      /* PWM Generator 3           */
241     UDMA_IRQHandler,                        /* uDMA Software Transfer    */
242     UDMAERR_IRQHandler,                     /* uDMA Error                */
243     ADC1SS0_IRQHandler,                     /* ADC1 Sequence 0           */
244     ADC1SS1_IRQHandler,                     /* ADC1 Sequence 1           */
245     ADC1SS2_IRQHandler,                     /* ADC1 Sequence 2           */
246     ADC1SS3_IRQHandler,                     /* ADC1 Sequence 3           */
247     EPI0_IRQHandler,                        /* External Bus Interface 0  */
248     GPIOJ_IRQHandler,                       /* GPIO Port J               */
249     GPIOK_IRQHandler,                       /* GPIO Port K               */
250     GPIOL_IRQHandler,                       /* GPIO Port L               */
251     SSI2_IRQHandler,                        /* SSI2 Rx and Tx            */
252     SSI3_IRQHandler,                        /* SSI3 Rx and Tx            */
253     UART3_IRQHandler,                       /* UART3 Rx and Tx           */
254     UART4_IRQHandler,                       /* UART4 Rx and Tx           */
255     UART5_IRQHandler,                       /* UART5 Rx and Tx           */
256     UART6_IRQHandler,                       /* UART6 Rx and Tx           */
257     UART7_IRQHandler,                       /* UART7 Rx and Tx           */
258     I2C2_IRQHandler,                        /* I2C2 Master and Slave     */
259     I2C3_IRQHandler,                        /* I2C3 Master and Slave     */
260     TIMER4A_IRQHandler,                     /* Timer 4 subtimer A        */
261     TIMER4B_IRQHandler,                     /* Timer 4 subtimer B        */
262     TIMER5A_IRQHandler,                     /* Timer 5 subtimer A        */
263     TIMER5B_IRQHandler,                     /* Timer 5 subtimer B        */
264     SYSEXC_IRQHandler,                      /* FPU                       */
265     0,                                      /* Reserved                  */
266     0,                                      /* Reserved                  */
267     I2C4_IRQHandler,                        /* I2C4 Master and Slave     */
268     I2C5_IRQHandler,                        /* I2C5 Master and Slave     */
269     GPIOM_IRQHandler,                       /* GPIO Port M               */
270     GPION_IRQHandler,                       /* GPIO Port N               */
271     0,                                      /* Reserved                  */
272     TAMPER0_IRQHandler,                     /* Tamper                    */
273     GPIOP0_IRQHandler,                      /* GPIO Port P(Summary or P0)*/
274     GPIOP1_IRQHandler,                      /* GPIO Port P1              */
275     GPIOP2_IRQHandler,                      /* GPIO Port P2              */
276     GPIOP3_IRQHandler,                      /* GPIO Port P3              */
277     GPIOP4_IRQHandler,                      /* GPIO Port P4              */
278     GPIOP5_IRQHandler,                      /* GPIO Port P5              */
279     GPIOP6_IRQHandler,                      /* GPIO Port P6              */
280     GPIOP7_IRQHandler,                      /* GPIO Port P7              */
281     GPIOQ0_IRQHandler,                      /* GPIO Port Q(Summary or Q0)*/
282     GPIOQ1_IRQHandler,                      /* GPIO Port Q1              */
283     GPIOQ2_IRQHandler,                      /* GPIO Port Q2              */
284     GPIOQ3_IRQHandler,                      /* GPIO Port Q3              */
285     GPIOQ4_IRQHandler,                      /* GPIO Port Q4              */
286     GPIOQ5_IRQHandler,                      /* GPIO Port Q5              */
287     GPIOQ6_IRQHandler,                      /* GPIO Port Q6              */
288     GPIOQ7_IRQHandler,                      /* GPIO Port Q7              */
289     GPIOR_IRQHandler,                       /* GPIO Port R               */
290     GPIOS_IRQHandler,                       /* GPIO Port S               */
291     SHA0_IRQHandler,                        /* SHA/MD5 0                 */
292     AES0_IRQHandler,                        /* AES 0                     */
293     DES0_IRQHandler,                        /* DES3DES 0                 */
294     LCD0_IRQHandler,                        /* LCD Controller 0          */
295     TIMER6A_IRQHandler,                     /* Timer 6 subtimer A        */
296     TIMER6B_IRQHandler,                     /* Timer 6 subtimer B        */
297     TIMER7A_IRQHandler,                     /* Timer 7 subtimer A        */
298     TIMER7B_IRQHandler,                     /* Timer 7 subtimer B        */
299     I2C6_IRQHandler,                        /* I2C6 Master and Slave     */
300     I2C7_IRQHandler,                        /* I2C7 Master and Slave     */
301     0,                                      /* Reserved                  */
302     ONEWIRE0_IRQHandler,                    /* One Wire 0                */
303     0,                                      /* Reserved                  */
304     0,                                      /* Reserved                  */
305     0,                                      /* Reserved                  */
306     I2C8_IRQHandler,                        /* I2C8 Master and Slave     */
307     I2C9_IRQHandler,                        /* I2C9 Master and Slave     */
308     GPIOT_IRQHandler,                       /* GPIO Port T               */
309     0,                                      /* Reserved                  */
310     0,                                      /* Reserved                  */
311 };
312 
313 /* The following are constructs created by the linker, indicating where the     */
314 /* the "data" and "bss" segments reside in memory.  The initializers for the    */
315 /* for the "data" segment resides immediately following the "text" segment.     */
316 extern uint32_t __data_load__;
317 extern uint32_t __data_start__;
318 extern uint32_t __data_end__;
319 
320 
321 /* This is the code that gets called when the processor first starts execution  */
322 /* following a reset event.  Only the absolutely necessary set is performed,    */
323 /* after which the application supplied entry() routine is called.  Any fancy   */
324 /* actions (such as making decisions based on the reset cause register, and     */
325 /* resetting the bits in that register) are left solely in the hands of the     */
326 /* application.                                                                 */
Reset_Handler(void)327 void Reset_Handler(void)
328 {
329     uint32_t *pui32Src, *pui32Dest;
330 
331     //
332     // Copy the data segment initializers from flash to SRAM.
333     //
334     pui32Src = &__data_load__;
335     for (pui32Dest = &__data_start__; pui32Dest < &__data_end__;)
336     {
337         *pui32Dest++ = *pui32Src++;
338     }
339 
340     /* Call system initialization routine */
341     SystemInit();
342 
343     /* Jump to the main initialization routine. */
344     _mainCRTStartup();
345 }
346 
347 /* This is the code that gets called when the processor receives an unexpected  */
348 /* interrupt.  This simply enters an infinite loop, preserving the system state */
349 /* for examination by a debugger.                                               */
Default_Handler(void)350 void Default_Handler(void)
351 {
352     /* Enter an infinite loop. */
353     while (1)
354     {
355     }
356 }