]> git.gir.st - tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_CR/TARGET_LPC11U68/startup_LPC11U68.cpp
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_NXP / TARGET_LPC11U6X / TOOLCHAIN_GCC_CR / TARGET_LPC11U68 / startup_LPC11U68.cpp
1 extern "C" {
2
3 #include "LPC11U6x.h"
4 #define WEAK __attribute__ ((weak))
5 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
6 #define AFTER_VECTORS __attribute__ ((section(".after_vectors")))void ResetISR(void);
7
8 // Patch the AEABI integer divide functions to use MCU's romdivide library
9 #ifdef __USE_ROMDIVIDE
10 // Location in memory that holds the address of the ROM Driver table
11 #define PTR_ROM_DRIVER_TABLE ((unsigned int *)(0x1FFF1FF8))
12 // Variables to store addresses of idiv and udiv functions within MCU ROM
13 unsigned int *pDivRom_idiv;
14 unsigned int *pDivRom_uidiv;
15 #endif
16
17
18 extern unsigned int __data_section_table;
19 extern unsigned int __data_section_table_end;
20 extern unsigned int __bss_section_table;
21 extern unsigned int __bss_section_table_end;
22
23
24 extern void __libc_init_array(void);
25 extern int main(void);
26 extern void _vStackTop(void);
27 extern void (* const g_pfnVectors[])(void);
28
29 void ResetISR(void);
30 WEAK void NMI_Handler(void);
31 WEAK void HardFault_Handler(void);
32 WEAK void SVC_Handler(void);
33 WEAK void PendSV_Handler(void);
34 WEAK void SysTick_Handler(void);
35 WEAK void IntDefaultHandler(void);
36
37 void PIN_INT0_IRQHandler (void) ALIAS(IntDefaultHandler);
38 void PIN_INT1_IRQHandler (void) ALIAS(IntDefaultHandler);
39 void PIN_INT2_IRQHandler (void) ALIAS(IntDefaultHandler);
40 void PIN_INT3_IRQHandler (void) ALIAS(IntDefaultHandler);
41 void PIN_INT4_IRQHandler (void) ALIAS(IntDefaultHandler);
42 void PIN_INT5_IRQHandler (void) ALIAS(IntDefaultHandler);
43 void PIN_INT6_IRQHandler (void) ALIAS(IntDefaultHandler);
44 void PIN_INT7_IRQHandler (void) ALIAS(IntDefaultHandler);
45 void GINT0_IRQHandler (void) ALIAS(IntDefaultHandler);
46 void GINT1_IRQHandler (void) ALIAS(IntDefaultHandler);
47 void I2C1_IRQHandler (void) ALIAS(IntDefaultHandler);
48 void USART1_4_IRQHandler (void) ALIAS(IntDefaultHandler);
49 void USART2_3_IRQHandler (void) ALIAS(IntDefaultHandler);
50 void SCT0_1_IRQHandler (void) ALIAS(IntDefaultHandler);
51 void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler);
52 void I2C0_IRQHandler (void) ALIAS(IntDefaultHandler);
53 void TIMER16_0_IRQHandler (void) ALIAS(IntDefaultHandler);
54 void TIMER16_1_IRQHandler (void) ALIAS(IntDefaultHandler);
55 void TIMER32_0_IRQHandler (void) ALIAS(IntDefaultHandler);
56 void TIMER32_1_IRQHandler (void) ALIAS(IntDefaultHandler);
57 void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler);
58 void USART0_IRQHandler (void) ALIAS(IntDefaultHandler);
59 void USB_IRQHandler (void) ALIAS(IntDefaultHandler);
60 void USB_FIQHandler (void) ALIAS(IntDefaultHandler);
61 void ADCA_IRQHandler (void) ALIAS(IntDefaultHandler);
62 void RTC_IRQHandler (void) ALIAS(IntDefaultHandler);
63 void BOD_WDT_IRQHandler (void) ALIAS(IntDefaultHandler);
64 void FMC_IRQHandler (void) ALIAS(IntDefaultHandler);
65 void DMA_IRQHandler (void) ALIAS(IntDefaultHandler);
66 void ADCB_IRQHandler (void) ALIAS(IntDefaultHandler);
67 void USBWakeup_IRQHandler (void) ALIAS(IntDefaultHandler);
68
69 __attribute__ ((section(".isr_vector")))
70 void (* const g_pfnVectors[])(void) = {
71 // Core Level - CM0
72 &_vStackTop, // The initial stack pointer
73 ResetISR, // The reset handler
74 NMI_Handler, // The NMI handler
75 HardFault_Handler, // The hard fault handler
76 0, // Reserved
77 0, // Reserved
78 0, // Reserved
79 0, // Reserved
80 0, // Reserved
81 0, // Reserved
82 0, // Reserved
83 SVC_Handler, // SVCall handler
84 0, // Reserved
85 0, // Reserved
86 PendSV_Handler, // The PendSV handler
87 SysTick_Handler, // The SysTick handler
88
89 // Chip Level - LPC11U68
90 PIN_INT0_IRQHandler, // 0 - GPIO pin interrupt 0
91 PIN_INT1_IRQHandler, // 1 - GPIO pin interrupt 1
92 PIN_INT2_IRQHandler, // 2 - GPIO pin interrupt 2
93 PIN_INT3_IRQHandler, // 3 - GPIO pin interrupt 3
94 PIN_INT4_IRQHandler, // 4 - GPIO pin interrupt 4
95 PIN_INT5_IRQHandler, // 5 - GPIO pin interrupt 5
96 PIN_INT6_IRQHandler, // 6 - GPIO pin interrupt 6
97 PIN_INT7_IRQHandler, // 7 - GPIO pin interrupt 7
98 GINT0_IRQHandler, // 8 - GPIO GROUP0 interrupt
99 GINT1_IRQHandler, // 9 - GPIO GROUP1 interrupt
100 I2C1_IRQHandler, // 10 - I2C1
101 USART1_4_IRQHandler, // 11 - combined USART1 & 4 interrupt
102 USART2_3_IRQHandler, // 12 - combined USART2 & 3 interrupt
103 SCT0_1_IRQHandler, // 13 - combined SCT0 and 1 interrupt
104 SSP1_IRQHandler, // 14 - SPI/SSP1 Interrupt
105 I2C0_IRQHandler, // 15 - I2C0
106 TIMER16_0_IRQHandler, // 16 - CT16B0 (16-bit Timer 0)
107 TIMER16_1_IRQHandler, // 17 - CT16B1 (16-bit Timer 1)
108 TIMER32_0_IRQHandler, // 18 - CT32B0 (32-bit Timer 0)
109 TIMER32_1_IRQHandler, // 19 - CT32B1 (32-bit Timer 1)
110 SSP0_IRQHandler, // 20 - SPI/SSP0 Interrupt
111 USART0_IRQHandler, // 21 - USART0
112 USB_IRQHandler, // 22 - USB IRQ
113 USB_FIQHandler, // 23 - USB FIQ
114 ADCA_IRQHandler, // 24 - ADC A(A/D Converter)
115 RTC_IRQHandler, // 25 - Real Time CLock interrpt
116 BOD_WDT_IRQHandler, // 25 - Combined Brownout/Watchdog interrupt
117 FMC_IRQHandler, // 27 - IP2111 Flash Memory Controller
118 DMA_IRQHandler, // 28 - DMA interrupt
119 ADCB_IRQHandler, // 24 - ADC B (A/D Converter)
120 USBWakeup_IRQHandler, // 30 - USB wake-up interrupt
121 0, // 31 - Reserved
122 };
123 /* End Vector */
124
125 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
126 unsigned int *pulDest = (unsigned int*) start;
127 unsigned int *pulSrc = (unsigned int*) romstart;
128 unsigned int loop;
129 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++;
130 }
131
132 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) {
133 unsigned int *pulDest = (unsigned int*) start;
134 unsigned int loop;
135 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0;
136 }
137
138
139 /* Reset entry point*/
140 extern "C" void software_init_hook(void) __attribute__((weak));
141
142 AFTER_VECTORS void ResetISR(void) {
143 unsigned int LoadAddr, ExeAddr, SectionLen;
144 unsigned int *SectionTableAddr;
145
146 SectionTableAddr = &__data_section_table;
147
148 while (SectionTableAddr < &__data_section_table_end) {
149 LoadAddr = *SectionTableAddr++;
150 ExeAddr = *SectionTableAddr++;
151 SectionLen = *SectionTableAddr++;
152 data_init(LoadAddr, ExeAddr, SectionLen);
153 }
154 while (SectionTableAddr < &__bss_section_table_end) {
155 ExeAddr = *SectionTableAddr++;
156 SectionLen = *SectionTableAddr++;
157 bss_init(ExeAddr, SectionLen);
158 }
159
160 // Patch the AEABI integer divide functions to use MCU's romdivide library
161 #ifdef __USE_ROMDIVIDE
162 // Get address of Integer division routines function table in ROM
163 unsigned int *div_ptr = (unsigned int *)((unsigned int *)*(PTR_ROM_DRIVER_TABLE))[4];
164 // Get addresses of integer divide routines in ROM
165 // These address are then used by the code in aeabi_romdiv_patch.s
166 pDivRom_idiv = (unsigned int *)div_ptr[0];
167 pDivRom_uidiv = (unsigned int *)div_ptr[1];
168 #endif
169
170
171 SystemInit();
172 if (software_init_hook)
173 software_init_hook();
174 else {
175 __libc_init_array();
176 main();
177 }
178 while (1) {;}
179 }
180
181 AFTER_VECTORS void NMI_Handler (void) {}
182 AFTER_VECTORS void HardFault_Handler (void) {}
183 AFTER_VECTORS void MemManage_Handler (void) {}
184 AFTER_VECTORS void BusFault_Handler (void) {}
185 AFTER_VECTORS void UsageFault_Handler(void) {}
186 AFTER_VECTORS void SVC_Handler (void) {}
187 AFTER_VECTORS void DebugMon_Handler (void) {}
188 AFTER_VECTORS void PendSV_Handler (void) {}
189 AFTER_VECTORS void SysTick_Handler (void) {}
190 AFTER_VECTORS void IntDefaultHandler (void) {}
191
192 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) {return 0;}
193 }
194
195 #include <stdlib.h>
196
197 void *operator new(size_t size) {return malloc(size);}
198 void *operator new[](size_t size){return malloc(size);}
199
200 void operator delete(void *p) {free(p);}
201 void operator delete[](void *p) {free(p);}
Imprint / Impressum