diff options
Diffstat (limited to 'Project/src/platform/stm32f0-gcc/startup/handlers_cm.c')
-rw-r--r-- | Project/src/platform/stm32f0-gcc/startup/handlers_cm.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/Project/src/platform/stm32f0-gcc/startup/handlers_cm.c b/Project/src/platform/stm32f0-gcc/startup/handlers_cm.c new file mode 100644 index 0000000..95b59a9 --- /dev/null +++ b/Project/src/platform/stm32f0-gcc/startup/handlers_cm.c @@ -0,0 +1,113 @@ +/** + * Handlers setup code for Cortex-M. + */ + +typedef void (*ptr_func_t)(); + +// Undefined handler is pointing to this function, this stop MCU. +// This function name must by not mangled, so must be C, +// because alias("..") is working only with C code +void __stop() { while (1); } + +// Handlers for Cortex-M core. +// These handler are with attribute 'weak' and can be overwritten +// by non-weak function, default is __stop() function +__attribute__((weak, alias("__stop"))) void RESET_handler(); +__attribute__((weak, alias("__stop"))) void NMI_handler(); +__attribute__((weak, alias("__stop"))) void HARDFAULT_handler(); +__attribute__((weak, alias("__stop"))) void MEMMANAGE_handler(); +__attribute__((weak, alias("__stop"))) void BUSFAULT_handler(); +__attribute__((weak, alias("__stop"))) void USAGEFAULT_handler(); +__attribute__((weak, alias("__stop"))) void SVCALL_handler(); +__attribute__((weak, alias("__stop"))) void DEBUGMONITOR_handler(); +__attribute__((weak, alias("__stop"))) void PENDSV_handler(); +__attribute__((weak, alias("__stop"))) void SYSTICK_handler(); + +// Handlers for peripherals' interrupts +__attribute__((weak, alias("__stop"))) void WWDG_handler(); +__attribute__((weak, alias("__stop"))) void PVD_VDDIO2_handler(); +__attribute__((weak, alias("__stop"))) void RTC_handler(); +__attribute__((weak, alias("__stop"))) void FLASH_handler(); +__attribute__((weak, alias("__stop"))) void RCC_CRS_handler(); +__attribute__((weak, alias("__stop"))) void EXTI0_1_handler(); +__attribute__((weak, alias("__stop"))) void EXTI2_3_handler(); +__attribute__((weak, alias("__stop"))) void EXTI4_15_handler(); +__attribute__((weak, alias("__stop"))) void TSC_handler(); +__attribute__((weak, alias("__stop"))) void DMA_0064_handler(); +__attribute__((weak, alias("__stop"))) void DMA_DMA2_0068_handler(); +__attribute__((weak, alias("__stop"))) void DMA_DMA2_006C_handler(); +__attribute__((weak, alias("__stop"))) void ADC_COMP_handler(); +__attribute__((weak, alias("__stop"))) void TIM1_0074_handler(); +__attribute__((weak, alias("__stop"))) void TIM1_0078_handler(); +__attribute__((weak, alias("__stop"))) void TIM2_handler(); +__attribute__((weak, alias("__stop"))) void TIM3_handler(); +__attribute__((weak, alias("__stop"))) void TIM6_DAC_handler(); +__attribute__((weak, alias("__stop"))) void TIM7_handler(); +__attribute__((weak, alias("__stop"))) void TIM14_handler(); +__attribute__((weak, alias("__stop"))) void TIM15_handler(); +__attribute__((weak, alias("__stop"))) void TIM16_handler(); +__attribute__((weak, alias("__stop"))) void TIM17_handler(); +__attribute__((weak, alias("__stop"))) void I2C1_handler(); +__attribute__((weak, alias("__stop"))) void I2C2_handler(); +__attribute__((weak, alias("__stop"))) void SPI1_handler(); +__attribute__((weak, alias("__stop"))) void SPI2_handler(); +__attribute__((weak, alias("__stop"))) void USART1_handler(); +__attribute__((weak, alias("__stop"))) void USART2_handler(); +__attribute__((weak, alias("__stop"))) void USART_00B3_handler(); +__attribute__((weak, alias("__stop"))) void CEC_CAN_handler(); +__attribute__((weak, alias("__stop"))) void USB_handler(); + +// Dummy handler (for unused vectors) +__attribute__((weak, alias("__stop"))) void DUMMY_handler(); + +// Vector table for handlers +// This array will be placed in ".vectors" section defined in linker script. +__attribute__((section(".vectors"), used)) ptr_func_t __isr_vectors[] = { + RESET_handler, + NMI_handler, + HARDFAULT_handler, + MEMMANAGE_handler, + BUSFAULT_handler, + USAGEFAULT_handler, + DUMMY_handler, + DUMMY_handler, + DUMMY_handler, + DUMMY_handler, + SVCALL_handler, + DEBUGMONITOR_handler, + DUMMY_handler, + PENDSV_handler, + SYSTICK_handler, + WWDG_handler, + PVD_VDDIO2_handler, + RTC_handler, + FLASH_handler, + RCC_CRS_handler, + EXTI0_1_handler, + EXTI2_3_handler, + EXTI4_15_handler, + TSC_handler, + DMA_0064_handler, + DMA_DMA2_0068_handler, + DMA_DMA2_006C_handler, + ADC_COMP_handler, + TIM1_0074_handler, + TIM1_0078_handler, + TIM2_handler, + TIM3_handler, + TIM6_DAC_handler, + TIM7_handler, + TIM14_handler, + TIM15_handler, + TIM16_handler, + TIM17_handler, + I2C1_handler, + I2C2_handler, + SPI1_handler, + SPI2_handler, + USART1_handler, + USART2_handler, + USART_00B3_handler, + CEC_CAN_handler, + USB_handler, +}; |