aboutsummaryrefslogtreecommitdiff
path: root/init_high.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'init_high.cpp')
-rw-r--r--init_high.cpp197
1 files changed, 197 insertions, 0 deletions
diff --git a/init_high.cpp b/init_high.cpp
index 235a649..48abe70 100644
--- a/init_high.cpp
+++ b/init_high.cpp
@@ -1,9 +1,129 @@
#include <stdint.h>
+/**
+ * Symbols that are defined by the linker
+ */
extern uint32_t _copy_data_load, _copy_data_store, _copy_data_store_end;
extern uint32_t _bss_start, _bss_end;
+extern "C" {
+
+/**
+ * Declare all the interrupt/event handlers as weak symbols and make them aliases of the default handler.
+ */
+
+void Default_Handler() __attribute__((weak));
+
+void _Reset_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void NMI_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void HardFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void MemManage_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void BusFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void UsageFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SVC_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DebugMon_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void PendSV_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SysTick_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void WWDG_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void PVD_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TAMPER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RTC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void FLASH_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RCC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI0_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel5_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel6_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel7_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void ADC1_2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USB_HP_CAN1_TX_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USB_LP_CAN1_RX0_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void CAN1_RX1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void CAN1_SCE_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI9_5_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_BRK_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_UP_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_TRG_COM_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_CC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C1_EV_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C1_ER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C2_EV_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C2_ER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SPI1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SPI2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI15_10_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RTCAlarm_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USBWakeUp_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+}
+
extern int main();
+
+extern "C" int halt();
extern "C" int init_high();
int init_high() {
@@ -25,3 +145,80 @@ int init_high() {
return main();
}
+
+void Default_Handler() {
+ halt();
+}
+
+/*
+ *
+ */
+__attribute__((section(".isr_vectors")))
+uint32_t isr_vectors[74] = {
+ (uint32_t) _Reset_Handler,
+ (uint32_t) NMI_Handler,
+ (uint32_t) HardFault_Handler,
+ (uint32_t) MemManage_Handler,
+ (uint32_t) BusFault_Handler,
+ (uint32_t) UsageFault_Handler,
+ 0,
+ 0,
+ 0,
+ 0,
+ (uint32_t) SVC_Handler,
+ (uint32_t) DebugMon_Handler,
+ 0,
+ (uint32_t) PendSV_Handler,
+ (uint32_t) SysTick_Handler,
+ (uint32_t) WWDG_IRQHandler,
+ (uint32_t) PVD_IRQHandler,
+ (uint32_t) TAMPER_IRQHandler,
+ (uint32_t) RTC_IRQHandler,
+ (uint32_t) FLASH_IRQHandler,
+ (uint32_t) RCC_IRQHandler,
+ (uint32_t) EXTI0_IRQHandler,
+ (uint32_t) EXTI1_IRQHandler,
+ (uint32_t) EXTI2_IRQHandler,
+ (uint32_t) EXTI3_IRQHandler,
+ (uint32_t) EXTI4_IRQHandler,
+ (uint32_t) DMA1_Channel1_IRQHandler,
+ (uint32_t) DMA1_Channel2_IRQHandler,
+ (uint32_t) DMA1_Channel3_IRQHandler,
+ (uint32_t) DMA1_Channel4_IRQHandler,
+ (uint32_t) DMA1_Channel5_IRQHandler,
+ (uint32_t) DMA1_Channel6_IRQHandler,
+ (uint32_t) DMA1_Channel7_IRQHandler,
+ (uint32_t) ADC1_2_IRQHandler,
+ (uint32_t) USB_HP_CAN1_TX_IRQHandler,
+ (uint32_t) USB_LP_CAN1_RX0_IRQHandler,
+ (uint32_t) CAN1_RX1_IRQHandler,
+ (uint32_t) CAN1_SCE_IRQHandler,
+ (uint32_t) EXTI9_5_IRQHandler,
+ (uint32_t) TIM1_BRK_IRQHandler,
+ (uint32_t) TIM1_UP_IRQHandler,
+ (uint32_t) TIM1_TRG_COM_IRQHandler,
+ (uint32_t) TIM1_CC_IRQHandler,
+ (uint32_t) TIM2_IRQHandler,
+ (uint32_t) TIM3_IRQHandler,
+ (uint32_t) TIM4_IRQHandler,
+ (uint32_t) I2C1_EV_IRQHandler,
+ (uint32_t) I2C1_ER_IRQHandler,
+ (uint32_t) I2C2_EV_IRQHandler,
+ (uint32_t) I2C2_ER_IRQHandler,
+ (uint32_t) SPI1_IRQHandler,
+ (uint32_t) SPI2_IRQHandler,
+ (uint32_t) USART1_IRQHandler,
+ (uint32_t) USART2_IRQHandler,
+ (uint32_t) USART3_IRQHandler,
+ (uint32_t) EXTI15_10_IRQHandler,
+ (uint32_t) RTCAlarm_IRQHandler,
+ (uint32_t) USBWakeUp_IRQHandler,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0
+};