]>
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
5 #define WEAK __attribute__ ((weak))
6 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
7 #define AFTER_VECTORS __attribute__ ((section(".after_vectors")))void ResetISR(void);
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
;
15 extern void __libc_init_array(void);
16 extern int main(void);
17 extern void _vStackTop(void);
18 extern void (* const g_pfnVectors
[])(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);
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
);
82 __attribute__ ((section(".isr_vector")))
83 void (* const g_pfnVectors
[])(void) = {
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
96 SVC_Handler
, // SVCall handler
97 DebugMon_Handler
, // Debug monitor handler
99 PendSV_Handler
, // The PendSV handler
100 SysTick_Handler
, // The SysTick handler
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
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
;
158 for (loop
= 0; loop
< len
; loop
= loop
+ 4) *pulDest
++ = *pulSrc
++;
161 AFTER_VECTORS
void bss_init(unsigned int start
, unsigned int len
) {
162 unsigned int *pulDest
= (unsigned int*) start
;
164 for (loop
= 0; loop
< len
; loop
= loop
+ 4) *pulDest
++ = 0;
168 /* Reset entry point*/
169 extern "C" void software_init_hook(void) __attribute__((weak
));
171 AFTER_VECTORS
void ResetISR(void) {
172 unsigned int LoadAddr
, ExeAddr
, SectionLen
;
173 unsigned int *SectionTableAddr
;
175 SectionTableAddr
= &__data_section_table
;
177 while (SectionTableAddr
< &__data_section_table_end
) {
178 LoadAddr
= *SectionTableAddr
++;
179 ExeAddr
= *SectionTableAddr
++;
180 SectionLen
= *SectionTableAddr
++;
181 data_init(LoadAddr
, ExeAddr
, SectionLen
);
183 while (SectionTableAddr
< &__bss_section_table_end
) {
184 ExeAddr
= *SectionTableAddr
++;
185 SectionLen
= *SectionTableAddr
++;
186 bss_init(ExeAddr
, SectionLen
);
190 if (software_init_hook
)
191 software_init_hook();
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) {}
210 int __aeabi_atexit(void *object
, void (*destructor
)(void *), void *dso_handle
) {return 0;}
215 void *operator new(size_t size
) {return malloc(size
);}
216 void *operator new[](size_t size
){return malloc(size
);}
218 void operator delete(void *p
) {free(p
);}
219 void operator delete[](void *p
) {free(p
);}