Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UAVCAN UAVCAN_Subscriber
crt0.c
00001 /* 00002 * Pavel Kirienko, 2014 <pavel.kirienko@gmail.com> 00003 * ARM Cortex-M0(+)/M1/M3 startup file. 00004 */ 00005 00006 typedef void (*funptr_t)(void); 00007 00008 #define fill32(start, end, filler) { \ 00009 unsigned *p1 = start; \ 00010 const unsigned * const p2 = end; \ 00011 while (p1 < p2) \ 00012 *p1++ = filler; \ 00013 } 00014 00015 extern const unsigned _etext; 00016 00017 extern unsigned _data; 00018 extern unsigned _edata; 00019 00020 extern unsigned _bss; 00021 extern unsigned _ebss; 00022 00023 extern funptr_t __init_array_start; 00024 extern funptr_t __init_array_end; 00025 00026 __attribute__((noreturn)) 00027 extern int main(void); 00028 00029 extern void SystemInit(void); 00030 00031 #pragma GCC optimize 1 00032 00033 /** 00034 * Prototypes for the functions below 00035 */ 00036 void Reset_Handler(void); 00037 void Default_Handler(void); 00038 void NMI_Handler(void); 00039 void HardFault_Handler(void); 00040 void SVC_Handler(void); 00041 void PendSV_Handler(void); 00042 void SysTick_Handler(void); 00043 00044 /** 00045 * Firmware entry point 00046 */ 00047 __attribute__((naked, noreturn)) 00048 void Reset_Handler(void) 00049 { 00050 // Data section 00051 { 00052 const unsigned* tp = &_etext; 00053 unsigned* dp = &_data; 00054 while (dp < &_edata) 00055 { 00056 *dp++ = *tp++; 00057 } 00058 } 00059 00060 // BSS section 00061 fill32(&_bss, &_ebss, 0); 00062 00063 SystemInit(); 00064 00065 // Constructors 00066 { 00067 funptr_t* fpp = &__init_array_start; 00068 while (fpp < &__init_array_end) 00069 { 00070 (*fpp)(); 00071 fpp++; 00072 } 00073 } 00074 00075 (void)main(); 00076 00077 while (1) { } 00078 } 00079 00080 /** 00081 * Default handlers 00082 */ 00083 __attribute__((weak)) 00084 void Default_Handler(void) 00085 { 00086 while(1) { } 00087 } 00088 00089 __attribute__((weak)) 00090 void NMI_Handler(void) 00091 { 00092 while(1) { } 00093 } 00094 00095 __attribute__((weak)) 00096 void HardFault_Handler(void) 00097 { 00098 while(1) { } 00099 } 00100 00101 __attribute__((weak)) 00102 void SVC_Handler(void) 00103 { 00104 while(1) { } 00105 } 00106 00107 __attribute__((weak)) 00108 void PendSV_Handler(void) 00109 { 00110 while(1) { } 00111 } 00112 00113 __attribute__((weak)) 00114 void SysTick_Handler(void) 00115 { 00116 while(1) { } 00117 } 00118 00119 /** 00120 * Default vectors for LPC11C24, to be overriden by the firmware as needed 00121 */ 00122 #define ALIAS(f) __attribute__ ((weak, alias (#f))) 00123 00124 void CAN_IRQHandler(void) ALIAS(Default_Handler); 00125 void SSP1_IRQHandler(void) ALIAS(Default_Handler); 00126 void I2C_IRQHandler(void) ALIAS(Default_Handler); 00127 void TIMER16_0_IRQHandler(void) ALIAS(Default_Handler); 00128 void TIMER16_1_IRQHandler(void) ALIAS(Default_Handler); 00129 void TIMER32_0_IRQHandler(void) ALIAS(Default_Handler); 00130 void TIMER32_1_IRQHandler(void) ALIAS(Default_Handler); 00131 void SSP0_IRQHandler(void) ALIAS(Default_Handler); 00132 void UART_IRQHandler(void) ALIAS(Default_Handler); 00133 void ADC_IRQHandler(void) ALIAS(Default_Handler); 00134 void WDT_IRQHandler(void) ALIAS(Default_Handler); 00135 void BOD_IRQHandler(void) ALIAS(Default_Handler); 00136 void PIOINT3_IRQHandler(void) ALIAS(Default_Handler); 00137 void PIOINT2_IRQHandler(void) ALIAS(Default_Handler); 00138 void PIOINT1_IRQHandler(void) ALIAS(Default_Handler); 00139 void PIOINT0_IRQHandler(void) ALIAS(Default_Handler); 00140 void WAKEUP_IRQHandler(void) ALIAS(Default_Handler); 00141 00142 /** 00143 * Refer to the linker script 00144 */ 00145 extern void __stack_end(void); 00146 00147 /** 00148 * Vector table for LPC11Cxx 00149 * Must be explicitly defined 'used', otherwise LTO optimizer will discard it. 00150 */ 00151 __attribute__ ((used, section("vectors"))) 00152 void (* const VectorTable[64])(void) = 00153 { 00154 __stack_end, // The initial stack pointer 00155 Reset_Handler, // The reset handler 00156 NMI_Handler, // The NMI handler 00157 HardFault_Handler, // The hard fault handler 00158 0, // Reserved 00159 0, // Reserved 00160 0, // Reserved 00161 0, // Reserved 00162 0, // Reserved 00163 0, // Reserved 00164 0, // Reserved 00165 SVC_Handler, // SVCall handler 00166 0, // Reserved 00167 0, // Reserved 00168 PendSV_Handler, // The PendSV handler 00169 SysTick_Handler, // The SysTick handler 00170 00171 WAKEUP_IRQHandler, // PIO0_0 Wakeup 00172 WAKEUP_IRQHandler, // PIO0_1 Wakeup 00173 WAKEUP_IRQHandler, // PIO0_2 Wakeup 00174 WAKEUP_IRQHandler, // PIO0_3 Wakeup 00175 WAKEUP_IRQHandler, // PIO0_4 Wakeup 00176 WAKEUP_IRQHandler, // PIO0_5 Wakeup 00177 WAKEUP_IRQHandler, // PIO0_6 Wakeup 00178 WAKEUP_IRQHandler, // PIO0_7 Wakeup 00179 WAKEUP_IRQHandler, // PIO0_8 Wakeup 00180 WAKEUP_IRQHandler, // PIO0_9 Wakeup 00181 WAKEUP_IRQHandler, // PIO0_10 Wakeup 00182 WAKEUP_IRQHandler, // PIO0_11 Wakeup 00183 WAKEUP_IRQHandler, // PIO1_0 Wakeup 00184 00185 CAN_IRQHandler, // C_CAN Interrupt 00186 SSP1_IRQHandler, // SPI/SSP1 Interrupt 00187 I2C_IRQHandler, // I2C0 00188 TIMER16_0_IRQHandler, // CT16B0 (16-bit Timer 0) 00189 TIMER16_1_IRQHandler, // CT16B1 (16-bit Timer 1) 00190 TIMER32_0_IRQHandler, // CT32B0 (32-bit Timer 0) 00191 TIMER32_1_IRQHandler, // CT32B1 (32-bit Timer 1) 00192 SSP0_IRQHandler, // SPI/SSP0 Interrupt 00193 UART_IRQHandler, // UART0 00194 00195 0, // Reserved 00196 0, // Reserved 00197 00198 ADC_IRQHandler, // ADC (A/D Converter) 00199 WDT_IRQHandler, // WDT (Watchdog Timer) 00200 BOD_IRQHandler, // BOD (Brownout Detect) 00201 0, // Reserved 00202 PIOINT3_IRQHandler, // PIO INT3 00203 PIOINT2_IRQHandler, // PIO INT2 00204 PIOINT1_IRQHandler, // PIO INT1 00205 PIOINT0_IRQHandler, // PIO INT0 00206 00207 0, 00208 0, 00209 0, 00210 0, 00211 0, 00212 0, 00213 0, 00214 0, 00215 0, 00216 0, 00217 0, 00218 0, 00219 0, 00220 0, 00221 0, 00222 0 00223 };
Generated on Tue Jul 12 2022 17:17:30 by
