]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68/startup_LPC11U68.cpp
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_NXP / TARGET_LPC11U6X / TOOLCHAIN_GCC_ARM / TARGET_LPC11U68 / startup_LPC11U68.cpp
1 extern "C" {
2
3 #include "LPC11U6x.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 SVC_Handler(void);
24 WEAK void PendSV_Handler(void);
25 WEAK void SysTick_Handler(void);
26 WEAK void IntDefaultHandler(void);
27
28 void PIN_INT0_IRQHandler (void) ALIAS(IntDefaultHandler);
29 void PIN_INT1_IRQHandler (void) ALIAS(IntDefaultHandler);
30 void PIN_INT2_IRQHandler (void) ALIAS(IntDefaultHandler);
31 void PIN_INT3_IRQHandler (void) ALIAS(IntDefaultHandler);
32 void PIN_INT4_IRQHandler (void) ALIAS(IntDefaultHandler);
33 void PIN_INT5_IRQHandler (void) ALIAS(IntDefaultHandler);
34 void PIN_INT6_IRQHandler (void) ALIAS(IntDefaultHandler);
35 void PIN_INT7_IRQHandler (void) ALIAS(IntDefaultHandler);
36 void GINT0_IRQHandler (void) ALIAS(IntDefaultHandler);
37 void GINT1_IRQHandler (void) ALIAS(IntDefaultHandler);
38 void I2C1_IRQHandler (void) ALIAS(IntDefaultHandler);
39 void USART1_4_IRQHandler (void) ALIAS(IntDefaultHandler);
40 void USART2_3_IRQHandler (void) ALIAS(IntDefaultHandler);
41 void SCT0_1_IRQHandler (void) ALIAS(IntDefaultHandler);
42 void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler);
43 void I2C0_IRQHandler (void) ALIAS(IntDefaultHandler);
44 void TIMER16_0_IRQHandler (void) ALIAS(IntDefaultHandler);
45 void TIMER16_1_IRQHandler (void) ALIAS(IntDefaultHandler);
46 void TIMER32_0_IRQHandler (void) ALIAS(IntDefaultHandler);
47 void TIMER32_1_IRQHandler (void) ALIAS(IntDefaultHandler);
48 void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler);
49 void USART0_IRQHandler (void) ALIAS(IntDefaultHandler);
50 void USB_IRQHandler (void) ALIAS(IntDefaultHandler);
51 void USB_FIQHandler (void) ALIAS(IntDefaultHandler);
52 void ADCA_IRQHandler (void) ALIAS(IntDefaultHandler);
53 void RTC_IRQHandler (void) ALIAS(IntDefaultHandler);
54 void BOD_WDT_IRQHandler (void) ALIAS(IntDefaultHandler);
55 void FMC_IRQHandler (void) ALIAS(IntDefaultHandler);
56 void DMA_IRQHandler (void) ALIAS(IntDefaultHandler);
57 void ADCB_IRQHandler (void) ALIAS(IntDefaultHandler);
58 void USBWakeup_IRQHandler (void) ALIAS(IntDefaultHandler);
59
60 __attribute__ ((section(".isr_vector")))
61 void (* const g_pfnVectors[])(void) = {
62         // Core Level - CM0
63     &_vStackTop,                     // The initial stack pointer
64     ResetISR,                        // The reset handler
65     NMI_Handler,                     // The NMI handler
66     HardFault_Handler,               // The hard fault handler
67     0,                               // Reserved
68     0,                               // Reserved
69     0,                               // Reserved
70     0,                               // Reserved
71     0,                               // Reserved
72     0,                               // Reserved
73     0,                               // Reserved
74     SVC_Handler,                     // SVCall handler
75     0,                               // Reserved
76     0,                               // Reserved
77     PendSV_Handler,                  // The PendSV handler
78     SysTick_Handler,                 // The SysTick handler
79
80     // Chip Level - LPC11U68
81     PIN_INT0_IRQHandler,             //  0 - GPIO pin interrupt 0
82     PIN_INT1_IRQHandler,             //  1 - GPIO pin interrupt 1
83     PIN_INT2_IRQHandler,             //  2 - GPIO pin interrupt 2
84     PIN_INT3_IRQHandler,             //  3 - GPIO pin interrupt 3
85     PIN_INT4_IRQHandler,             //  4 - GPIO pin interrupt 4
86     PIN_INT5_IRQHandler,             //  5 - GPIO pin interrupt 5
87     PIN_INT6_IRQHandler,             //  6 - GPIO pin interrupt 6
88     PIN_INT7_IRQHandler,             //  7 - GPIO pin interrupt 7
89     GINT0_IRQHandler,                //  8 - GPIO GROUP0 interrupt
90     GINT1_IRQHandler,                //  9 - GPIO GROUP1 interrupt
91     I2C1_IRQHandler,                 // 10 - I2C1
92     USART1_4_IRQHandler,             // 11 - combined USART1 & 4 interrupt
93     USART2_3_IRQHandler,             // 12 - combined USART2 & 3 interrupt
94     SCT0_1_IRQHandler,               // 13 - combined SCT0 and 1 interrupt
95     SSP1_IRQHandler,                 // 14 - SPI/SSP1 Interrupt
96     I2C0_IRQHandler,                 // 15 - I2C0
97     TIMER16_0_IRQHandler,            // 16 - CT16B0 (16-bit Timer 0)
98     TIMER16_1_IRQHandler,            // 17 - CT16B1 (16-bit Timer 1)
99     TIMER32_0_IRQHandler,            // 18 - CT32B0 (32-bit Timer 0)
100     TIMER32_1_IRQHandler,            // 19 - CT32B1 (32-bit Timer 1)
101     SSP0_IRQHandler,                 // 20 - SPI/SSP0 Interrupt
102     USART0_IRQHandler,               // 21 - USART0
103     USB_IRQHandler,                  // 22 - USB IRQ
104     USB_FIQHandler,                  // 23 - USB FIQ
105     ADCA_IRQHandler,                 // 24 - ADC A(A/D Converter)
106     RTC_IRQHandler,                  // 25 - Real Time CLock interrpt
107     BOD_WDT_IRQHandler,              // 25 - Combined Brownout/Watchdog interrupt
108     FMC_IRQHandler,                  // 27 - IP2111 Flash Memory Controller
109     DMA_IRQHandler,                  // 28 - DMA interrupt
110     ADCB_IRQHandler,                 // 24 - ADC B (A/D Converter)
111     USBWakeup_IRQHandler,            // 30 - USB wake-up interrupt
112     0,                               // 31 - Reserved
113 }; 
114 /* End Vector */
115
116 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
117     unsigned int *pulDest = (unsigned int*) start;
118     unsigned int *pulSrc = (unsigned int*) romstart;
119     unsigned int loop;
120     for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++;
121 }
122
123 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) {
124     unsigned int *pulDest = (unsigned int*) start;
125     unsigned int loop;
126     for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0;
127 }
128
129
130 /* Reset entry point*/
131 extern "C" void software_init_hook(void) __attribute__((weak));
132
133 AFTER_VECTORS void ResetISR(void) {
134     unsigned int LoadAddr, ExeAddr, SectionLen;
135     unsigned int *SectionTableAddr;
136     
137     SectionTableAddr = &__data_section_table;
138     
139     while (SectionTableAddr < &__data_section_table_end) {
140         LoadAddr = *SectionTableAddr++;
141         ExeAddr = *SectionTableAddr++;
142         SectionLen = *SectionTableAddr++;
143         data_init(LoadAddr, ExeAddr, SectionLen);
144     }
145     while (SectionTableAddr < &__bss_section_table_end) {
146         ExeAddr = *SectionTableAddr++;
147         SectionLen = *SectionTableAddr++;
148         bss_init(ExeAddr, SectionLen);
149     }
150     
151     SystemInit();
152     if (software_init_hook) 
153         software_init_hook(); 
154     else {
155         __libc_init_array();
156         main();
157     }
158     while (1) {;}
159 }
160
161 AFTER_VECTORS void NMI_Handler       (void) {}
162 AFTER_VECTORS void HardFault_Handler (void) {}
163 AFTER_VECTORS void MemManage_Handler (void) {}
164 AFTER_VECTORS void BusFault_Handler  (void) {}
165 AFTER_VECTORS void UsageFault_Handler(void) {}
166 AFTER_VECTORS void SVC_Handler       (void) {}
167 AFTER_VECTORS void DebugMon_Handler  (void) {}
168 AFTER_VECTORS void PendSV_Handler    (void) {}
169 AFTER_VECTORS void SysTick_Handler   (void) {}
170 AFTER_VECTORS void IntDefaultHandler (void) {}
171
172 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) {return 0;}
173 }
174
175 #include <stdlib.h>
176
177 void *operator new(size_t size)  {return malloc(size);}
178 void *operator new[](size_t size){return malloc(size);}
179
180 void operator delete(void *p)   {free(p);}
181 void operator delete[](void *p) {free(p);}