summaryrefslogtreecommitdiff
path: root/app/platform/stm32f0-gcc/startup/handlers_cm.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/platform/stm32f0-gcc/startup/handlers_cm.c')
-rw-r--r--app/platform/stm32f0-gcc/startup/handlers_cm.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/app/platform/stm32f0-gcc/startup/handlers_cm.c b/app/platform/stm32f0-gcc/startup/handlers_cm.c
new file mode 100644
index 0000000..95b59a9
--- /dev/null
+++ b/app/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,
+};