]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_KLXX/TARGET_KL25Z/TOOLCHAIN_GCC_CW_EWL/startup_MKL25Z4.c
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_Freescale / TARGET_KLXX / TARGET_KL25Z / TOOLCHAIN_GCC_CW_EWL / startup_MKL25Z4.c
1 #include <string.h>
2 #include <stdlib.h>
3
4 #include "cmsis.h"
5
6 // Linker Script
7 extern unsigned long _estack;
8 extern char __S_romp[];
9
10 extern char __START_BSS[];
11 extern char __END_BSS[];
12
13 // CRT0
14 extern void __init_registers();
15 extern void __copy_rom_sections_to_ram(void);
16 extern void __call_static_initializers(void);
17 extern void __init_user();
18
19 // User/mbed Defined
20 extern int main();
21 extern void mbed_exit(int return_code);
22
23 void _ExitProcess(int return_code) {
24     mbed_exit(return_code);
25 }
26
27 void __thumb_startup(void) {
28     // Setup registers
29     __init_registers();
30     
31     // Disable the Watchdog because it may reset the core before entering main().
32     SIM->COPC = 0x0;
33     
34     //  zero-fill the .bss section
35     memset(__START_BSS, 0, (__END_BSS - __START_BSS));
36     
37     if (__S_romp != 0L)
38         __copy_rom_sections_to_ram();
39     
40     //  call C++ static initializers
41     __call_static_initializers();
42     
43     // initializations before main, user specific
44     __init_user();
45     
46     exit(main());
47     
48     //  should never get here
49     while (1);
50 }
51
52 void Default_Handler() {
53     __asm("bkpt");
54 }
55
56 /* Weak definitions of handlers point to Default_Handler if not implemented */
57 void NMI_Handler() __attribute__ ((weak, alias("Default_Handler")));
58 void HardFault_Handler() __attribute__ ((weak, alias("Default_Handler")));
59 void SVC_Handler() __attribute__ ((weak, alias("Default_Handler")));
60 void PendSV_Handler() __attribute__ ((weak, alias("Default_Handler")));
61 void SysTick_Handler() __attribute__ ((weak, alias("Default_Handler")));
62
63 void DMA0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
64 void DMA1_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
65 void DMA2_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
66 void DMA3_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
67 void MCM_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
68 void FTFL_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
69 void PMC_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
70 void LLW_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
71 void I2C0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
72 void I2C1_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
73 void SPI0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
74 void SPI1_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
75 void UART0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
76 void UART1_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
77 void UART2_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
78 void ADC0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
79 void CMP0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
80 void FTM0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
81 void FTM1_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
82 void FTM2_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
83 void RTC_Alarm_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
84 void RTC_Seconds_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
85 void PIT_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
86 void USBOTG_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
87 void DAC0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
88 void TSI0_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
89 void MCG_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
90 void LPTimer_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
91 void PORTA_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
92 void PORTD_IRQHandler() __attribute__ ((weak, alias("Default_Handler")));
93
94 /* The Interrupt Vector Table */
95 void (* const InterruptVector[])() __attribute__ ((section(".vectortable"))) = {
96     /* Processor exceptions */
97     (void(*)(void)) &_estack,
98     __thumb_startup,
99     NMI_Handler,
100     HardFault_Handler,
101     0,
102     0,
103     0,
104     0,
105     0,
106     0,
107     0,
108     SVC_Handler,
109     0,
110     0,
111     PendSV_Handler,
112     SysTick_Handler,
113
114     /* Interrupts */
115     DMA0_IRQHandler, /* DMA Channel 0 Transfer Complete and Error */
116     DMA1_IRQHandler, /* DMA Channel 1 Transfer Complete and Error */
117     DMA2_IRQHandler, /* DMA Channel 2 Transfer Complete and Error */
118     DMA3_IRQHandler, /* DMA Channel 3 Transfer Complete and Error */
119     MCM_IRQHandler, /* Normal Interrupt */
120     FTFL_IRQHandler, /* FTFL Interrupt */
121     PMC_IRQHandler, /* PMC Interrupt */
122     LLW_IRQHandler, /* Low Leakage Wake-up */
123     I2C0_IRQHandler, /* I2C0 interrupt */
124     I2C1_IRQHandler, /* I2C1 interrupt */
125     SPI0_IRQHandler, /* SPI0 Interrupt */
126     SPI1_IRQHandler, /* SPI1 Interrupt */
127     UART0_IRQHandler, /* UART0 Status and Error interrupt */
128     UART1_IRQHandler, /* UART1 Status and Error interrupt */
129     UART2_IRQHandler, /* UART2 Status and Error interrupt */
130     ADC0_IRQHandler, /* ADC0 interrupt */
131     CMP0_IRQHandler, /* CMP0 interrupt */
132     FTM0_IRQHandler, /* FTM0 fault, overflow and channels interrupt */
133     FTM1_IRQHandler, /* FTM1 fault, overflow and channels interrupt */
134     FTM2_IRQHandler, /* FTM2 fault, overflow and channels interrupt */
135     RTC_Alarm_IRQHandler, /* RTC Alarm interrupt */
136     RTC_Seconds_IRQHandler, /* RTC Seconds interrupt */
137     PIT_IRQHandler, /* PIT timer all channels interrupt */
138     Default_Handler, /* Reserved interrupt 39/23 */
139     USBOTG_IRQHandler, /* USB interrupt */
140     DAC0_IRQHandler, /* DAC0 interrupt */
141     TSI0_IRQHandler, /* TSI0 Interrupt */
142     MCG_IRQHandler, /* MCG Interrupt */
143     LPTimer_IRQHandler, /* LPTimer interrupt */
144     Default_Handler, /* Reserved interrupt 45/29 */
145     PORTA_IRQHandler, /* Port A interrupt */
146     PORTD_IRQHandler /* Port D interrupt */
147 };