]>
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
5 #define WEAK __attribute__ ((weak))
6 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
7 #define AFTER_VECTORS __attribute__ ((section(".after_vectors")))
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
;
14 extern void __libc_init_array(void);
15 extern int main(void);
16 extern void _vStackTop(void);
17 extern void (* const g_pfnVectors
[])(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);
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
);
67 __attribute__ ((section(".isr_vector")))
68 void (* const g_pfnVectors
[])(void) = {
69 &_vStackTop
, ResetISR
, NMI_Handler
,
116 USBActivity_IRQHandler
,
117 CANActivity_IRQHandler
,
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
;
124 for (loop
= 0; loop
< len
; loop
= loop
+ 4) *pulDest
++ = *pulSrc
++;
127 AFTER_VECTORS
void bss_init(unsigned int start
, unsigned int len
) {
128 unsigned int *pulDest
= (unsigned int*) start
;
130 for (loop
= 0; loop
< len
; loop
= loop
+ 4) *pulDest
++ = 0;
133 extern "C" void software_init_hook(void) __attribute__((weak
));
135 AFTER_VECTORS
void ResetISR(void) {
136 unsigned int LoadAddr
, ExeAddr
, SectionLen
;
137 unsigned int *SectionTableAddr
;
139 SectionTableAddr
= &__data_section_table
;
141 while (SectionTableAddr
< &__data_section_table_end
) {
142 LoadAddr
= *SectionTableAddr
++;
143 ExeAddr
= *SectionTableAddr
++;
144 SectionLen
= *SectionTableAddr
++;
145 data_init(LoadAddr
, ExeAddr
, SectionLen
);
147 while (SectionTableAddr
< &__bss_section_table_end
) {
148 ExeAddr
= *SectionTableAddr
++;
149 SectionLen
= *SectionTableAddr
++;
150 bss_init(ExeAddr
, SectionLen
);
154 if (software_init_hook
) // give control to the RTOS
155 software_init_hook(); // this will also call __libc_init_array
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) {}
174 int __aeabi_atexit(void *object
, void (*destructor
)(void *), void *dso_handle
) {return 0;}
179 void *operator new(size_t size
) {return malloc(size
);}
180 void *operator new[](size_t size
){return malloc(size
);}
182 void operator delete(void *p
) {free(p
);}
183 void operator delete[](void *p
) {free(p
);}