]> git.gir.st - tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC176X/TOOLCHAIN_GCC_CR/startup_LPC17xx.cpp
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_NXP / TARGET_LPC176X / TOOLCHAIN_GCC_CR / startup_LPC17xx.cpp
1 extern "C" {
2
3 #include "LPC17xx.h"
4
5 #define WEAK __attribute__ ((weak))
6 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
7 #define AFTER_VECTORS __attribute__ ((section(".after_vectors")))
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 extern void __libc_init_array(void);
15 extern int main(void);
16 extern void _vStackTop(void);
17 extern void (* const g_pfnVectors[])(void);
18
19 void ResetISR (void);
20 WEAK void NMI_Handler (void);
21 WEAK void HardFault_Handler (void);
22 WEAK void MemManage_Handler (void);
23 WEAK void BusFault_Handler (void);
24 WEAK void UsageFault_Handler(void);
25 WEAK void SVC_Handler (void);
26 WEAK void DebugMon_Handler (void);
27 WEAK void PendSV_Handler (void);
28 WEAK void SysTick_Handler (void);
29 WEAK void IntDefaultHandler (void);
30
31 void WDT_IRQHandler (void) ALIAS(IntDefaultHandler);
32 void TIMER0_IRQHandler (void) ALIAS(IntDefaultHandler);
33 void TIMER1_IRQHandler (void) ALIAS(IntDefaultHandler);
34 void TIMER2_IRQHandler (void) ALIAS(IntDefaultHandler);
35 void TIMER3_IRQHandler (void) ALIAS(IntDefaultHandler);
36 void UART0_IRQHandler (void) ALIAS(IntDefaultHandler);
37 void UART1_IRQHandler (void) ALIAS(IntDefaultHandler);
38 void UART2_IRQHandler (void) ALIAS(IntDefaultHandler);
39 void UART3_IRQHandler (void) ALIAS(IntDefaultHandler);
40 void PWM1_IRQHandler (void) ALIAS(IntDefaultHandler);
41 void I2C0_IRQHandler (void) ALIAS(IntDefaultHandler);
42 void I2C1_IRQHandler (void) ALIAS(IntDefaultHandler);
43 void I2C2_IRQHandler (void) ALIAS(IntDefaultHandler);
44 void SPI_IRQHandler (void) ALIAS(IntDefaultHandler);
45 void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler);
46 void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler);
47 void PLL0_IRQHandler (void) ALIAS(IntDefaultHandler);
48 void RTC_IRQHandler (void) ALIAS(IntDefaultHandler);
49 void EINT0_IRQHandler (void) ALIAS(IntDefaultHandler);
50 void EINT1_IRQHandler (void) ALIAS(IntDefaultHandler);
51 void EINT2_IRQHandler (void) ALIAS(IntDefaultHandler);
52 void EINT3_IRQHandler (void) ALIAS(IntDefaultHandler);
53 void ADC_IRQHandler (void) ALIAS(IntDefaultHandler);
54 void BOD_IRQHandler (void) ALIAS(IntDefaultHandler);
55 void USB_IRQHandler (void) ALIAS(IntDefaultHandler);
56 void CAN_IRQHandler (void) ALIAS(IntDefaultHandler);
57 void DMA_IRQHandler (void) ALIAS(IntDefaultHandler);
58 void I2S_IRQHandler (void) ALIAS(IntDefaultHandler);
59 void ENET_IRQHandler (void) ALIAS(IntDefaultHandler);
60 void RIT_IRQHandler (void) ALIAS(IntDefaultHandler);
61 void MCPWM_IRQHandler (void) ALIAS(IntDefaultHandler);
62 void QEI_IRQHandler (void) ALIAS(IntDefaultHandler);
63 void PLL1_IRQHandler (void) ALIAS(IntDefaultHandler);
64 void USBActivity_IRQHandler(void) ALIAS(IntDefaultHandler);
65 void CANActivity_IRQHandler(void) ALIAS(IntDefaultHandler);
66
67 __attribute__ ((section(".isr_vector")))
68 void (* const g_pfnVectors[])(void) = {
69 &_vStackTop, ResetISR, NMI_Handler,
70 HardFault_Handler,
71 MemManage_Handler,
72 BusFault_Handler,
73 UsageFault_Handler,
74 0,
75 0,
76 0,
77 0,
78 SVC_Handler,
79 DebugMon_Handler,
80 0,
81 PendSV_Handler,
82 SysTick_Handler,
83 WDT_IRQHandler,
84 TIMER0_IRQHandler,
85 TIMER1_IRQHandler,
86 TIMER2_IRQHandler,
87 TIMER3_IRQHandler,
88 UART0_IRQHandler,
89 UART1_IRQHandler,
90 UART2_IRQHandler,
91 UART3_IRQHandler,
92 PWM1_IRQHandler,
93 I2C0_IRQHandler,
94 I2C1_IRQHandler,
95 I2C2_IRQHandler,
96 SPI_IRQHandler,
97 SSP0_IRQHandler,
98 SSP1_IRQHandler,
99 PLL0_IRQHandler,
100 RTC_IRQHandler,
101 EINT0_IRQHandler,
102 EINT1_IRQHandler,
103 EINT2_IRQHandler,
104 EINT3_IRQHandler,
105 ADC_IRQHandler,
106 BOD_IRQHandler,
107 USB_IRQHandler,
108 CAN_IRQHandler,
109 DMA_IRQHandler,
110 I2S_IRQHandler,
111 ENET_IRQHandler,
112 RIT_IRQHandler,
113 MCPWM_IRQHandler,
114 QEI_IRQHandler,
115 PLL1_IRQHandler,
116 USBActivity_IRQHandler,
117 CANActivity_IRQHandler,
118 };
119
120 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
121 unsigned int *pulDest = (unsigned int*) start;
122 unsigned int *pulSrc = (unsigned int*) romstart;
123 unsigned int loop;
124 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++;
125 }
126
127 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) {
128 unsigned int *pulDest = (unsigned int*) start;
129 unsigned int loop;
130 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0;
131 }
132
133 extern "C" void software_init_hook(void) __attribute__((weak));
134
135 AFTER_VECTORS void ResetISR(void) {
136 unsigned int LoadAddr, ExeAddr, SectionLen;
137 unsigned int *SectionTableAddr;
138
139 SectionTableAddr = &__data_section_table;
140
141 while (SectionTableAddr < &__data_section_table_end) {
142 LoadAddr = *SectionTableAddr++;
143 ExeAddr = *SectionTableAddr++;
144 SectionLen = *SectionTableAddr++;
145 data_init(LoadAddr, ExeAddr, SectionLen);
146 }
147 while (SectionTableAddr < &__bss_section_table_end) {
148 ExeAddr = *SectionTableAddr++;
149 SectionLen = *SectionTableAddr++;
150 bss_init(ExeAddr, SectionLen);
151 }
152
153 SystemInit();
154 if (software_init_hook) // give control to the RTOS
155 software_init_hook(); // this will also call __libc_init_array
156 else {
157 __libc_init_array();
158 main();
159 }
160 while (1) {;}
161 }
162
163 AFTER_VECTORS void NMI_Handler (void) {}
164 AFTER_VECTORS void HardFault_Handler (void) {}
165 AFTER_VECTORS void MemManage_Handler (void) {}
166 AFTER_VECTORS void BusFault_Handler (void) {}
167 AFTER_VECTORS void UsageFault_Handler(void) {}
168 AFTER_VECTORS void SVC_Handler (void) {}
169 AFTER_VECTORS void DebugMon_Handler (void) {}
170 AFTER_VECTORS void PendSV_Handler (void) {}
171 AFTER_VECTORS void SysTick_Handler (void) {}
172 AFTER_VECTORS void IntDefaultHandler (void) {}
173
174 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) {return 0;}
175 }
176
177 #include <stdlib.h>
178
179 void *operator new(size_t size) {return malloc(size);}
180 void *operator new[](size_t size){return malloc(size);}
181
182 void operator delete(void *p) {free(p);}
183 void operator delete[](void *p) {free(p);}
Imprint / Impressum