]> git.gir.st - tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC15XX/TOOLCHAIN_GCC_CR/startup_LPC15xx.cpp
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_NXP / TARGET_LPC15XX / TOOLCHAIN_GCC_CR / startup_LPC15xx.cpp
1 extern "C" {
2
3 #include "LPC15xx.h"
4
5 #define WEAK __attribute__ ((weak))
6 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
7 #define AFTER_VECTORS __attribute__ ((section(".after_vectors")))void ResetISR(void);
8
9 extern unsigned int __data_section_table;
10 extern unsigned int __data_section_table_end;
11 extern unsigned int __bss_section_table;
12 extern unsigned int __bss_section_table_end;
13
14
15 extern void __libc_init_array(void);
16 extern int main(void);
17 extern void _vStackTop(void);
18 extern void (* const g_pfnVectors[])(void);
19
20 void ResetISR (void);
21 WEAK void NMI_Handler(void);
22 WEAK void HardFault_Handler(void);
23 WEAK void MemManage_Handler(void);
24 WEAK void BusFault_Handler(void);
25 WEAK void UsageFault_Handler(void);
26 WEAK void SVC_Handler(void);
27 WEAK void DebugMon_Handler(void);
28 WEAK void PendSV_Handler(void);
29 WEAK void SysTick_Handler(void);
30 WEAK void IntDefaultHandler(void);
31
32
33 void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
34 void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
35 void FMC_IRQHandler(void) ALIAS(IntDefaultHandler);
36 void EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler);
37 void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
38 void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
39 void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
40 void PIN_INT0_IRQHandler(void) ALIAS(IntDefaultHandler);
41 void PIN_INT1_IRQHandler(void) ALIAS(IntDefaultHandler);
42 void PIN_INT2_IRQHandler(void) ALIAS(IntDefaultHandler);
43 void PIN_INT3_IRQHandler(void) ALIAS(IntDefaultHandler);
44 void PIN_INT4_IRQHandler(void) ALIAS(IntDefaultHandler);
45 void PIN_INT5_IRQHandler(void) ALIAS(IntDefaultHandler);
46 void PIN_INT6_IRQHandler(void) ALIAS(IntDefaultHandler);
47 void PIN_INT7_IRQHandler(void) ALIAS(IntDefaultHandler);
48 void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
49 void SCT0_IRQHandler(void) ALIAS(IntDefaultHandler);
50 void SCT1_IRQHandler(void) ALIAS(IntDefaultHandler);
51 void SCT2_IRQHandler(void) ALIAS(IntDefaultHandler);
52 void SCT3_IRQHandler(void) ALIAS(IntDefaultHandler);
53 void MRT_IRQHandler(void) ALIAS(IntDefaultHandler);
54 void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
55 void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
56 void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
57 void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
58 void SPI0_IRQHandler(void) ALIAS(IntDefaultHandler);
59 void SPI1_IRQHandler(void) ALIAS(IntDefaultHandler);
60 void CAN_IRQHandler(void) ALIAS(IntDefaultHandler);
61 void USB_IRQHandler(void) ALIAS(IntDefaultHandler);
62 void USB_FIQHandler(void) ALIAS(IntDefaultHandler);
63 void USBWakeup_IRQHandler(void) ALIAS(IntDefaultHandler);
64 void ADC0A_IRQHandler(void) ALIAS(IntDefaultHandler);
65 void ADC0B_IRQHandler(void) ALIAS(IntDefaultHandler);
66 void ADC0_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler);
67 void ADC0_OVR_IRQHandler(void) ALIAS(IntDefaultHandler);
68 void ADC1A_IRQHandler(void) ALIAS(IntDefaultHandler);
69 void ADC1B_IRQHandler(void) ALIAS(IntDefaultHandler);
70 void ADC1_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler);
71 void ADC1_OVR_IRQHandler(void) ALIAS(IntDefaultHandler);
72 void DAC_IRQHandler(void) ALIAS(IntDefaultHandler);
73 void ACMP0_IRQHandler(void) ALIAS(IntDefaultHandler);
74 void ACMP1_IRQHandler(void) ALIAS(IntDefaultHandler);
75 void ACMP2_IRQHandler(void) ALIAS(IntDefaultHandler);
76 void ACMP3_IRQHandler(void) ALIAS(IntDefaultHandler);
77 void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
78 void RTC_ALARM_IRQHandler(void) ALIAS(IntDefaultHandler);
79 void RTC_WAKE_IRQHandler(void) ALIAS(IntDefaultHandler);
80
81
82 __attribute__ ((section(".isr_vector")))
83 void (* const g_pfnVectors[])(void) = {
84 // Core Level - CM3
85 &_vStackTop, // The initial stack pointer
86 ResetISR, // The reset handler
87 NMI_Handler, // The NMI handler
88 HardFault_Handler, // The hard fault handler
89 MemManage_Handler, // The MPU fault handler
90 BusFault_Handler, // The bus fault handler
91 UsageFault_Handler, // The usage fault handler
92 0, // Reserved
93 0, // Reserved
94 0, // Reserved
95 0, // Reserved
96 SVC_Handler, // SVCall handler
97 DebugMon_Handler, // Debug monitor handler
98 0, // Reserved
99 PendSV_Handler, // The PendSV handler
100 SysTick_Handler, // The SysTick handler
101
102 // Chip Level - LPC15xx
103 WDT_IRQHandler, // 0 - Windowed watchdog timer
104 BOD_IRQHandler, // 1 - BOD
105 FMC_IRQHandler, // 2 - Flash controller
106 EEPROM_IRQHandler, // 3 - EEPROM controller
107 DMA_IRQHandler, // 4 - DMA
108 GINT0_IRQHandler, // 5 - GINT0
109 GINT1_IRQHandler, // 6 - GINT1
110 PIN_INT0_IRQHandler, // 7 - PIO INT0
111 PIN_INT1_IRQHandler, // 8 - PIO INT1
112 PIN_INT2_IRQHandler, // 9 - PIO INT2
113 PIN_INT3_IRQHandler, // 10 - PIO INT3
114 PIN_INT4_IRQHandler, // 11 - PIO INT4
115 PIN_INT5_IRQHandler, // 12 - PIO INT5
116 PIN_INT6_IRQHandler, // 13 - PIO INT6
117 PIN_INT7_IRQHandler, // 14 - PIO INT7
118 RIT_IRQHandler, // 15 - RIT
119 SCT0_IRQHandler, // 16 - State configurable timer
120 SCT1_IRQHandler, // 17 - State configurable timer
121 SCT2_IRQHandler, // 18 - State configurable timer
122 SCT3_IRQHandler, // 19 - State configurable timer
123 MRT_IRQHandler, // 20 - Multi-Rate Timer
124 UART0_IRQHandler, // 21 - UART0
125 UART1_IRQHandler, // 22 - UART1
126 UART2_IRQHandler, // 23 - UART2
127 I2C0_IRQHandler, // 24 - I2C0 controller
128 SPI0_IRQHandler, // 25 - SPI0 controller
129 SPI1_IRQHandler, // 26 - SPI1 controller
130 CAN_IRQHandler, // 27 - C_CAN0
131 USB_IRQHandler, // 28 - USB IRQ
132 USB_FIQHandler, // 29 - USB FIQ
133 USBWakeup_IRQHandler, // 30 - USB wake-up
134 ADC0A_IRQHandler, // 31 - ADC0 sequence A completion
135 ADC0B_IRQHandler, // 32 - ADC0 sequence B completion
136 ADC0_THCMP_IRQHandler, // 33 - ADC0 threshold compare
137 ADC0_OVR_IRQHandler, // 34 - ADC0 overrun
138 ADC1A_IRQHandler, // 35 - ADC1 sequence A completion
139 ADC1B_IRQHandler, // 36 - ADC1 sequence B completion
140 ADC1_THCMP_IRQHandler, // 37 - ADC1 threshold compare
141 ADC1_OVR_IRQHandler, // 38 - ADC1 overrun
142 DAC_IRQHandler, // 39 - DAC
143 ACMP0_IRQHandler, // 40 - Analog Comparator 0
144 ACMP1_IRQHandler, // 41 - Analog Comparator 1
145 ACMP2_IRQHandler, // 42 - Analog Comparator 2
146 ACMP3_IRQHandler, // 43 - Analog Comparator 3
147 QEI_IRQHandler, // 44 - QEI
148 RTC_ALARM_IRQHandler, // 45 - RTC alarm
149 RTC_WAKE_IRQHandler, // 46 - RTC wake-up
150
151 };
152 /* End Vector */
153
154 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
155 unsigned int *pulDest = (unsigned int*) start;
156 unsigned int *pulSrc = (unsigned int*) romstart;
157 unsigned int loop;
158 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++;
159 }
160
161 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) {
162 unsigned int *pulDest = (unsigned int*) start;
163 unsigned int loop;
164 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0;
165 }
166
167
168 /* Reset entry point*/
169 extern "C" void software_init_hook(void) __attribute__((weak));
170
171 AFTER_VECTORS void ResetISR(void) {
172 unsigned int LoadAddr, ExeAddr, SectionLen;
173 unsigned int *SectionTableAddr;
174
175 SectionTableAddr = &__data_section_table;
176
177 while (SectionTableAddr < &__data_section_table_end) {
178 LoadAddr = *SectionTableAddr++;
179 ExeAddr = *SectionTableAddr++;
180 SectionLen = *SectionTableAddr++;
181 data_init(LoadAddr, ExeAddr, SectionLen);
182 }
183 while (SectionTableAddr < &__bss_section_table_end) {
184 ExeAddr = *SectionTableAddr++;
185 SectionLen = *SectionTableAddr++;
186 bss_init(ExeAddr, SectionLen);
187 }
188
189 SystemInit();
190 if (software_init_hook)
191 software_init_hook();
192 else {
193 __libc_init_array();
194 main();
195 }
196 while (1) {;}
197 }
198
199 AFTER_VECTORS void NMI_Handler (void) {}
200 AFTER_VECTORS void HardFault_Handler (void) {}
201 AFTER_VECTORS void MemManage_Handler (void) {}
202 AFTER_VECTORS void BusFault_Handler (void) {}
203 AFTER_VECTORS void UsageFault_Handler(void) {}
204 AFTER_VECTORS void SVC_Handler (void) {}
205 AFTER_VECTORS void DebugMon_Handler (void) {}
206 AFTER_VECTORS void PendSV_Handler (void) {}
207 AFTER_VECTORS void SysTick_Handler (void) {}
208 AFTER_VECTORS void IntDefaultHandler (void) {}
209
210 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) {return 0;}
211 }
212
213 #include <stdlib.h>
214
215 void *operator new(size_t size) {return malloc(size);}
216 void *operator new[](size_t size){return malloc(size);}
217
218 void operator delete(void *p) {free(p);}
219 void operator delete[](void *p) {free(p);}
Imprint / Impressum