00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <stdint.h>
00038
00039
00040
00041
00042 extern uint32_t __etext;
00043 extern uint32_t __data_start__;
00044 extern uint32_t __data_end__;
00045 extern uint32_t __copy_table_start__;
00046 extern uint32_t __copy_table_end__;
00047 extern uint32_t __zero_table_start__;
00048 extern uint32_t __zero_table_end__;
00049 extern uint32_t __bss_start__;
00050 extern uint32_t __bss_end__;
00051 extern uint32_t __StackTop;
00052
00053
00054
00055
00056 typedef void( *pFunc )( void );
00057
00058
00059
00060
00061
00062 #ifndef __START
00063 extern void _start(void) __attribute__((noreturn));
00064 #else
00065 extern int __START(void) __attribute__((noreturn));
00066 #endif
00067
00068 #ifndef __NO_SYSTEM_INIT
00069 extern void SystemInit (void);
00070 #endif
00071
00072
00073
00074
00075
00076 void Default_Handler(void);
00077 void Reset_Handler(void);
00078
00079
00080
00081
00082
00083 #ifndef __STACK_SIZE
00084 #define __STACK_SIZE 0x00000400
00085 #endif
00086 static uint8_t stack[__STACK_SIZE] __attribute__ ((aligned(8), used, section(".stack")));
00087
00088 #ifndef __HEAP_SIZE
00089 #define __HEAP_SIZE 0x00000C00
00090 #endif
00091 #if __HEAP_SIZE > 0
00092 static uint8_t heap[__HEAP_SIZE] __attribute__ ((aligned(8), used, section(".heap")));
00093 #endif
00094
00095
00096
00097
00098
00099
00100 void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00101 void HardFault_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00102 void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00103 void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00104 void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00105 void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00106 void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00107 void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00108 void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
00109
00110
00111 void DMA_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00112 void GPIO_EVEN_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00113 void TIMER0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00114 void USART0_RX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00115 void USART0_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00116 void ACMP0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00117 void ADC0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00118 void DAC0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00119 void I2C0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00120 void GPIO_ODD_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00121 void TIMER1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00122 void TIMER2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00123 void USART1_RX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00124 void USART1_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00125 void USART2_RX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00126 void USART2_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00127 void UART0_RX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00128 void UART0_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00129 void LEUART0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00130 void LEUART1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00131 void LETIMER0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00132 void PCNT0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00133 void PCNT1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00134 void PCNT2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00135 void RTC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00136 void CMU_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00137 void VCMP_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00138 void LCD_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00139 void MSC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00140 void AES_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00141
00142
00143
00144
00145
00146
00147 const pFunc __Vectors[] __attribute__ ((section(".vectors"))) = {
00148
00149 (pFunc)&__StackTop,
00150 Reset_Handler,
00151 NMI_Handler,
00152 HardFault_Handler,
00153 MemManage_Handler,
00154 BusFault_Handler,
00155 UsageFault_Handler,
00156 Default_Handler,
00157 Default_Handler,
00158 Default_Handler,
00159 Default_Handler,
00160 SVC_Handler,
00161 DebugMon_Handler,
00162 Default_Handler,
00163 PendSV_Handler,
00164 SysTick_Handler,
00165
00166
00167 DMA_IRQHandler,
00168 GPIO_EVEN_IRQHandler,
00169 TIMER0_IRQHandler,
00170 USART0_RX_IRQHandler,
00171 USART0_TX_IRQHandler,
00172 ACMP0_IRQHandler,
00173 ADC0_IRQHandler,
00174 DAC0_IRQHandler,
00175 I2C0_IRQHandler,
00176 GPIO_ODD_IRQHandler,
00177 TIMER1_IRQHandler,
00178 TIMER2_IRQHandler,
00179 USART1_RX_IRQHandler,
00180 USART1_TX_IRQHandler,
00181 USART2_RX_IRQHandler,
00182 USART2_TX_IRQHandler,
00183 UART0_RX_IRQHandler,
00184 UART0_TX_IRQHandler,
00185 LEUART0_IRQHandler,
00186 LEUART1_IRQHandler,
00187 LETIMER0_IRQHandler,
00188 PCNT0_IRQHandler,
00189 PCNT1_IRQHandler,
00190 PCNT2_IRQHandler,
00191 RTC_IRQHandler,
00192 CMU_IRQHandler,
00193 VCMP_IRQHandler,
00194 LCD_IRQHandler,
00195 MSC_IRQHandler,
00196 AES_IRQHandler,
00197
00198 };
00199
00200
00201
00202
00203
00204 void Reset_Handler(void) {
00205 uint32_t *pSrc, *pDest;
00206 uint32_t *pTable __attribute__((unused));
00207
00208 #ifndef __NO_SYSTEM_INIT
00209 SystemInit();
00210 #endif
00211
00212
00213
00214
00215
00216
00217
00218 #ifdef __STARTUP_COPY_MULTIPLE
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229 pTable = &__copy_table_start__;
00230
00231 for (; pTable < &__copy_table_end__; pTable = pTable + 3)
00232 {
00233 pSrc = (uint32_t*)*(pTable + 0);
00234 pDest = (uint32_t*)*(pTable + 1);
00235 for (; pDest < (uint32_t*)(*(pTable + 1) + *(pTable + 2)) ; )
00236 {
00237 *pDest++ = *pSrc++;
00238 }
00239 }
00240 #else
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 pSrc = &__etext;
00251 pDest = &__data_start__;
00252
00253 for ( ; pDest < &__data_end__ ; )
00254 {
00255 *pDest++ = *pSrc++;
00256 }
00257 #endif
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 #ifdef __STARTUP_CLEAR_BSS_MULTIPLE
00270
00271
00272
00273
00274
00275
00276
00277 pTable = &__zero_table_start__;
00278
00279 for (; pTable < &__zero_table_end__; pTable = pTable + 2)
00280 {
00281 pDest = (uint32_t*)*(pTable + 0);
00282 for (; pDest < (uint32_t*)(*(pTable + 0) + *(pTable + 1)) ; )
00283 {
00284 *pDest++ = 0;
00285 }
00286 }
00287 #elif defined (__STARTUP_CLEAR_BSS)
00288
00289
00290
00291
00292
00293
00294
00295
00296 pDest = &__bss_start__;
00297
00298 for ( ; pDest < &__bss_end__ ; )
00299 {
00300 *pDest++ = 0ul;
00301 }
00302 #endif
00303
00304 #ifndef __START
00305 #define __START _start
00306 #endif
00307 __START();
00308 }
00309
00310
00311
00312
00313
00314 void Default_Handler(void)
00315 {
00316 while(1);
00317 }
00318