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 0x00000000
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 USART1_RX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00123 void USART1_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00124 void LESENSE_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00125 void LEUART0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00126 void LETIMER0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00127 void PCNT0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00128 void RTC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00129 void CMU_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00130 void VCMP_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00131 void LCD_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00132 void MSC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00133 void AES_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler")));
00134
00135
00136
00137
00138
00139
00140 const pFunc __Vectors[] __attribute__ ((section(".vectors"))) = {
00141
00142 (pFunc)&__StackTop,
00143 Reset_Handler,
00144 NMI_Handler,
00145 HardFault_Handler,
00146 MemManage_Handler,
00147 BusFault_Handler,
00148 UsageFault_Handler,
00149 Default_Handler,
00150 Default_Handler,
00151 Default_Handler,
00152 Default_Handler,
00153 SVC_Handler,
00154 DebugMon_Handler,
00155 Default_Handler,
00156 PendSV_Handler,
00157 SysTick_Handler,
00158
00159
00160 DMA_IRQHandler,
00161 GPIO_EVEN_IRQHandler,
00162 TIMER0_IRQHandler,
00163 USART0_RX_IRQHandler,
00164 USART0_TX_IRQHandler,
00165 ACMP0_IRQHandler,
00166 ADC0_IRQHandler,
00167 DAC0_IRQHandler,
00168 I2C0_IRQHandler,
00169 GPIO_ODD_IRQHandler,
00170 TIMER1_IRQHandler,
00171 USART1_RX_IRQHandler,
00172 USART1_TX_IRQHandler,
00173 LESENSE_IRQHandler,
00174 LEUART0_IRQHandler,
00175 LETIMER0_IRQHandler,
00176 PCNT0_IRQHandler,
00177 RTC_IRQHandler,
00178 CMU_IRQHandler,
00179 VCMP_IRQHandler,
00180 LCD_IRQHandler,
00181 MSC_IRQHandler,
00182 AES_IRQHandler,
00183
00184 };
00185
00186
00187
00188
00189
00190 void Reset_Handler(void) {
00191 uint32_t *pSrc, *pDest;
00192 uint32_t *pTable __attribute__((unused));
00193
00194 #ifndef __NO_SYSTEM_INIT
00195 SystemInit();
00196 #endif
00197
00198
00199
00200
00201
00202
00203
00204 #ifdef __STARTUP_COPY_MULTIPLE
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215 pTable = &__copy_table_start__;
00216
00217 for (; pTable < &__copy_table_end__; pTable = pTable + 3)
00218 {
00219 pSrc = (uint32_t*)*(pTable + 0);
00220 pDest = (uint32_t*)*(pTable + 1);
00221 for (; pDest < (uint32_t*)(*(pTable + 1) + *(pTable + 2)) ; )
00222 {
00223 *pDest++ = *pSrc++;
00224 }
00225 }
00226 #else
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236 pSrc = &__etext;
00237 pDest = &__data_start__;
00238
00239 for ( ; pDest < &__data_end__ ; )
00240 {
00241 *pDest++ = *pSrc++;
00242 }
00243 #endif
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 #ifdef __STARTUP_CLEAR_BSS_MULTIPLE
00256
00257
00258
00259
00260
00261
00262
00263 pTable = &__zero_table_start__;
00264
00265 for (; pTable < &__zero_table_end__; pTable = pTable + 2)
00266 {
00267 pDest = (uint32_t*)*(pTable + 0);
00268 for (; pDest < (uint32_t*)(*(pTable + 0) + *(pTable + 1)) ; )
00269 {
00270 *pDest++ = 0;
00271 }
00272 }
00273 #elif defined (__STARTUP_CLEAR_BSS)
00274
00275
00276
00277
00278
00279
00280
00281
00282 pDest = &__bss_start__;
00283
00284 for ( ; pDest < &__bss_end__ ; )
00285 {
00286 *pDest++ = 0ul;
00287 }
00288 #endif
00289
00290 #ifndef __START
00291 #define __START _start
00292 #endif
00293 __START();
00294 }
00295
00296
00297
00298
00299
00300 void Default_Handler(void)
00301 {
00302 while(1);
00303 }
00304