Contiki 2.6
|
00001 #include <stdint.h> 00002 #include <stm32f10x_map.h> 00003 00004 00005 extern int main(void); 00006 00007 typedef void (*ISR_func)(void); 00008 00009 00010 #define SECTION(x) __attribute__ ((section(#x))) 00011 #define ISR_VECTOR_SECTION SECTION(.isr_vector) 00012 static void sys_reset(void) __attribute__((naked)); 00013 void NMI_handler(void) __attribute__((interrupt)); 00014 void HardFault_handler(void) __attribute__((interrupt)); 00015 void MemManage_handler(void) __attribute__((interrupt)); 00016 void BusFault_handler(void) __attribute__((interrupt)); 00017 void UsageFault_handler(void) __attribute__((interrupt)); 00018 00019 static void unhandled_int(void) __attribute__((interrupt)); 00020 00021 #define UNHANDLED_ALIAS __attribute__((weak, alias("unhandled_int"))); 00022 void Main_Stack_End(void); 00023 void HardFault_handler(void)__attribute__((weak, alias("dHardFault_handler"))); 00024 void MemManage_handler(void)__attribute__((weak, alias("dMemManage_handler"))); 00025 void BusFault_handler(void) __attribute__((weak, alias("dBusFault_handler"))); 00026 void UsageFault_handler(void)__attribute__((weak, alias("dUsageFault_handler"))); 00027 void Reserved_handler(void) UNHANDLED_ALIAS; 00028 void SVCall_handler(void) UNHANDLED_ALIAS; 00029 void DebugMonitor_handler(void) UNHANDLED_ALIAS; 00030 void PendSV_handler(void) UNHANDLED_ALIAS; 00031 void SysTick_handler(void) UNHANDLED_ALIAS; 00032 void WWDG_handler(void) UNHANDLED_ALIAS; 00033 void PVD_handler(void) UNHANDLED_ALIAS; 00034 void TAMPER_handler(void) UNHANDLED_ALIAS; 00035 void RTC_handler(void) UNHANDLED_ALIAS; 00036 void FLASH_handler(void) UNHANDLED_ALIAS; 00037 void RCC_handler(void) UNHANDLED_ALIAS; 00038 void EXTI0_handler(void) UNHANDLED_ALIAS; 00039 void EXTI1_handler(void) UNHANDLED_ALIAS; 00040 void EXTI2_handler(void) UNHANDLED_ALIAS; 00041 void EXTI3_handler(void) UNHANDLED_ALIAS; 00042 void EXTI4_handler(void) UNHANDLED_ALIAS; 00043 void DMA1_Channel1_handler(void) UNHANDLED_ALIAS; 00044 void DMA1_Channel2_handler(void) UNHANDLED_ALIAS; 00045 void DMA1_Channel3_handler(void) UNHANDLED_ALIAS; 00046 void DMA1_Channel4_handler(void) UNHANDLED_ALIAS; 00047 void DMA1_Channel5_handler(void) UNHANDLED_ALIAS; 00048 void DMA1_Channel6_handler(void) UNHANDLED_ALIAS; 00049 void DMA1_Channel7_handler(void) UNHANDLED_ALIAS; 00050 void ADC1_2_handler(void) UNHANDLED_ALIAS; 00051 void USB_HP_CAN_TX_handler(void) UNHANDLED_ALIAS; 00052 void USB_LP_CAN_RX0_handler(void) UNHANDLED_ALIAS; 00053 void CAN_RX1_handler(void) UNHANDLED_ALIAS; 00054 void CAN_SCE_handler(void) UNHANDLED_ALIAS; 00055 void EXTI9_5_handler(void) UNHANDLED_ALIAS; 00056 void TIM1_BRK_handler(void) UNHANDLED_ALIAS; 00057 void TIM1_UP_handler(void) UNHANDLED_ALIAS; 00058 void TIM1_TRG_COM_handler(void) UNHANDLED_ALIAS; 00059 void TIM1_CC_handler(void) UNHANDLED_ALIAS; 00060 void TIM2_handler(void) UNHANDLED_ALIAS; 00061 void TIM3_handler(void) UNHANDLED_ALIAS; 00062 void TIM4_handler(void) UNHANDLED_ALIAS; 00063 void I2C1_EV_handler(void) UNHANDLED_ALIAS; 00064 void I2C1_ER_handler(void) UNHANDLED_ALIAS; 00065 void I2C2_EV_handler(void) UNHANDLED_ALIAS; 00066 void I2C2_ER_handler(void) UNHANDLED_ALIAS; 00067 void SPI1_handler(void) UNHANDLED_ALIAS; 00068 void SPI2_handler(void) UNHANDLED_ALIAS; 00069 void USART1_handler(void) UNHANDLED_ALIAS; 00070 void USART2_handler(void) UNHANDLED_ALIAS; 00071 void USART3_handler(void) UNHANDLED_ALIAS; 00072 void EXTI15_10_handler(void) UNHANDLED_ALIAS; 00073 void RTCAlarm_handler(void) UNHANDLED_ALIAS; 00074 void USBWakeup_handler(void) UNHANDLED_ALIAS; 00075 void TIM8_BRK_handler(void) UNHANDLED_ALIAS; 00076 void TIM8_UP_handler(void) UNHANDLED_ALIAS; 00077 void TIM8_TRG_COM_handler(void) UNHANDLED_ALIAS; 00078 void TIM8_CC_handler(void) UNHANDLED_ALIAS; 00079 void ADC3_handler(void) UNHANDLED_ALIAS; 00080 void FSMC_handler(void) UNHANDLED_ALIAS; 00081 void SDIO_handler(void) UNHANDLED_ALIAS; 00082 void TIM5_handler(void) UNHANDLED_ALIAS; 00083 void SPI3_handler(void) UNHANDLED_ALIAS; 00084 void UART4_handler(void) UNHANDLED_ALIAS; 00085 void UART5_handler(void) UNHANDLED_ALIAS; 00086 void TIM6_handler(void) UNHANDLED_ALIAS; 00087 void TIM7_handler(void) UNHANDLED_ALIAS; 00088 void DMA2_Channel1_handler(void) UNHANDLED_ALIAS; 00089 void DMA2_Channel2_handler(void) UNHANDLED_ALIAS; 00090 void DMA2_Channel3_handler(void) UNHANDLED_ALIAS; 00091 void DMA2_Channel4_5_handler(void) UNHANDLED_ALIAS; 00092 00093 const ISR_func isr_vector[76] ISR_VECTOR_SECTION = 00094 { 00095 Main_Stack_End, 00096 sys_reset, 00097 NMI_handler, 00098 HardFault_handler, 00099 MemManage_handler, 00100 BusFault_handler, 00101 UsageFault_handler, 00102 Reserved_handler, 00103 Reserved_handler, 00104 Reserved_handler, 00105 Reserved_handler, 00106 SVCall_handler, 00107 DebugMonitor_handler, 00108 Reserved_handler, 00109 PendSV_handler, 00110 SysTick_handler, 00111 WWDG_handler, 00112 PVD_handler, 00113 TAMPER_handler, 00114 RTC_handler, 00115 FLASH_handler, 00116 RCC_handler, 00117 EXTI0_handler, 00118 EXTI1_handler, 00119 EXTI2_handler, 00120 EXTI3_handler, 00121 EXTI4_handler, 00122 DMA1_Channel1_handler, 00123 DMA1_Channel2_handler, 00124 DMA1_Channel3_handler, 00125 DMA1_Channel4_handler, 00126 DMA1_Channel5_handler, 00127 DMA1_Channel6_handler, 00128 DMA1_Channel7_handler, 00129 ADC1_2_handler, 00130 USB_HP_CAN_TX_handler, 00131 USB_LP_CAN_RX0_handler, 00132 CAN_RX1_handler, 00133 CAN_SCE_handler, 00134 EXTI9_5_handler, 00135 TIM1_BRK_handler, 00136 TIM1_UP_handler, 00137 TIM1_TRG_COM_handler, 00138 TIM1_CC_handler, 00139 TIM2_handler, 00140 TIM3_handler, 00141 TIM4_handler, 00142 I2C1_EV_handler, 00143 I2C1_ER_handler, 00144 I2C2_EV_handler, 00145 I2C2_ER_handler, 00146 SPI1_handler, 00147 SPI2_handler, 00148 USART1_handler, 00149 USART2_handler, 00150 USART3_handler, 00151 EXTI15_10_handler, 00152 RTCAlarm_handler, 00153 USBWakeup_handler, 00154 TIM8_BRK_handler, 00155 TIM8_UP_handler, 00156 TIM8_TRG_COM_handler, 00157 TIM8_CC_handler, 00158 ADC3_handler, 00159 FSMC_handler, 00160 SDIO_handler, 00161 TIM5_handler, 00162 SPI3_handler, 00163 UART4_handler, 00164 UART5_handler, 00165 TIM6_handler, 00166 TIM7_handler, 00167 DMA2_Channel1_handler, 00168 DMA2_Channel2_handler, 00169 DMA2_Channel3_handler, 00170 DMA2_Channel4_5_handler 00171 }; 00172 00173 00174 00175 00176 extern uint8_t _data[]; 00177 extern uint8_t _etext[]; 00178 extern uint8_t _edata[]; 00179 00180 static void 00181 copy_initialized(void) 00182 { 00183 uint8_t *ram = _data; 00184 uint8_t *rom = _etext; 00185 while(ram < _edata) { 00186 *ram++ = *rom++; 00187 } 00188 } 00189 00190 extern uint8_t __bss_start[]; 00191 extern uint8_t __bss_end[]; 00192 00193 static void 00194 clear_bss(void) 00195 { 00196 uint8_t *m = __bss_start; 00197 while(m < __bss_end) { 00198 *m++ = 0; 00199 } 00200 } 00201 00202 static void 00203 start_hse_clock(void) 00204 { 00205 /* Start external oscillator */ 00206 RCC->CR |= RCC_CR_HSEON; 00207 /* Wait for oscillator to stabilize */ 00208 while(!(RCC->CR & RCC_CR_HSERDY)); 00209 } 00210 00211 static void 00212 use_pll() 00213 { 00214 RCC->CFGR = (RCC_CFGR_MCO_NOCLOCK 00215 | RCC_CFGR_PLLMULL6 /* PLL at 48MHz */ 00216 | RCC_CFGR_PLLSRC /* PLL runs on HSE */ 00217 | RCC_CFGR_PPRE2_DIV1 /* APB2 at 48MHz */ 00218 | RCC_CFGR_PPRE1_DIV2 /* APB1 at 24MHz */ 00219 | RCC_CFGR_HPRE_DIV1 /* AHB at 48 MHz */ 00220 | RCC_CFGR_USBPRE /* USB clock at same speed as PLL */ 00221 ); 00222 RCC->CR |= RCC_CR_PLLON; 00223 /* Wait for PLL */ 00224 while(!(RCC->CR & RCC_CR_PLLRDY)); 00225 /* Switch to PLL as system clock */ 00226 MODIFY_REG(RCC->CFGR, RCC_CFGR_SW,RCC_CFGR_SW_PLL); 00227 } 00228 00229 static void 00230 enable_fault_exceptions(void) 00231 { 00232 SCB->SHCSR |= (SCB_SHCSR_MEMFAULTENA | SCB_SHCSR_BUSFAULTENA 00233 | SCB_SHCSR_USGFAULTENA); 00234 } 00235 00236 static void 00237 sys_reset(void) 00238 { 00239 copy_initialized(); 00240 clear_bss(); 00241 enable_fault_exceptions(); 00242 start_hse_clock(); 00243 use_pll(); 00244 main(); 00245 while(1); 00246 00247 } 00248 00249 void 00250 NMI_handler(void) 00251 { 00252 while(1); 00253 } 00254 00255 00256 static void 00257 unhandled_int(void) 00258 { 00259 while(1); 00260 } 00261 00262 static void 00263 dHardFault_handler(void) 00264 { 00265 while(1); 00266 } 00267 00268 static void 00269 dUsageFault_handler(void) 00270 { 00271 while(1); 00272 } 00273 00274 static void 00275 dMemManage_handler(void) 00276 { 00277 while(1); 00278 } 00279 00280 static void 00281 dBusFault_handler(void) 00282 { 00283 while(1); 00284 }