From af5b3792973e876a860dae5dc7b7f9140f0e3a24 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 21 Dec 2015 00:16:57 +0100 Subject: o Moving more init code to C. --- CMakeLists.txt | 6 +- README.md | 2 + cmake/stm32.ld | 21 +++--- init_high.cpp | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++ init_high.h | 117 +++++++++++++++++++++++++++++++ init_low.s | 217 +-------------------------------------------------------- 6 files changed, 333 insertions(+), 227 deletions(-) create mode 100644 init_high.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 99b97dd..7c09d38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ target_include_directories(tinyprintf PUBLIC tinyprintf) ######################################################################################################### # test1 -add_executable(test1.elf test1.cpp init_low.s init_high.cpp include/stm32f10x_conf.h +add_executable(test1.elf test1.cpp init_low.s init_high.cpp init_high.h include/stm32f10x_conf.h # http://www.sparetimelabs.com/tinyprintf/tinyprintf.php tinyprintf/tinyprintf.c tinyprintf/tinyprintf.h tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.c @@ -50,7 +50,7 @@ add_extra_commands(test1.elf) ######################################################################################################### # serial1 -add_executable(serial1.elf serial1.cpp init_low.s init_high.cpp include/stm32f10x_conf.h +add_executable(serial1.elf serial1.cpp init_low.s init_high.cpp init_high.h include/stm32f10x_conf.h debug.cpp debug.h # http://www.sparetimelabs.com/tinyprintf/tinyprintf.php tinyprintf/tinyprintf.c tinyprintf/tinyprintf.h @@ -74,7 +74,7 @@ add_extra_commands(serial1.elf) ######################################################################################################### # serial2 -add_executable(serial2.elf serial2.cpp init_low.s init_high.cpp include/stm32f10x_conf.h +add_executable(serial2.elf serial2.cpp init_low.s init_high.cpp init_high.h include/stm32f10x_conf.h debug.cpp debug.h tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.c tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c diff --git a/README.md b/README.md index 22e36a7..b6c46f8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ * http://www.st.com/web/en/resource/technical/document/datasheet/CD00161566.pdf * http://www.banggood.com/ARM-Cortex-M3-STM32F103C8T6-STM32-Minimum-System-Development-Board-p-920184.html * http://www.lctech-inc.com/Hardware/Detail.aspx?id=0172e854-77b0-43d5-b300-68e570c914fd +* https://github.com/dwelch67/stm32_samples +* http://stackoverflow.com/questions/9565921/cortex-m3-initialisation * http://stackoverflow.com/questions/32422075/arm-bare-metal-binary-linking * https://github.com/ckormanyos/real-time-cpp/blob/master/ref_app/target/micros/stm32f100/make/stm32f100.ld diff --git a/cmake/stm32.ld b/cmake/stm32.ld index d15b4c2..fc69574 100644 --- a/cmake/stm32.ld +++ b/cmake/stm32.ld @@ -1,11 +1,5 @@ -/* - * https://github.com/barrybingo/SunMoonSim/blob/master/LinkerScript/STM32F103-MD.ld - */ - -/* Entry Point */ ENTRY(_Reset_Handler) -/* Specify the memory areas */ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K @@ -17,10 +11,19 @@ _estack = ORIGIN(RAM) + LENGTH(RAM); SECTIONS { + /* Put the ISR section at the start of the flash area */ + .isr : + { + /* The first word has to be the initial stack pointer */ + LONG(__initial_stack_pointer); + */init_high.cpp.obj(.isr_vectors) + } >FLASH + ASSERT(SIZEOF(.isr) > 100, "The isr_vectors section is too small") + ASSERT(SIZEOF(.isr) < 1000, "The isr_vectors section is too big") + ASSERT(ADDR(.isr) == ORIGIN(FLASH), "The isr_vectors section was not placed at the start of the flash area") + .text : { - *(.isr_vectors) - init.s:(.text) *(.text) KEEP(*(.text.*)) *(.rodata*) @@ -45,4 +48,6 @@ SECTIONS _bss_start = ADDR(.bss); _bss_end = _bss_start + SIZEOF(.bss); + + __initial_stack_pointer = ORIGIN(RAM) + LENGTH(RAM) - 1; } 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 +/** + * 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 +}; diff --git a/init_high.h b/init_high.h new file mode 100644 index 0000000..f80ac25 --- /dev/null +++ b/init_high.h @@ -0,0 +1,117 @@ +#ifndef INIT_HIGH_H +#define INIT_HIGH_H + +extern "C" { + +/** + * Declare all the interrupt/event handlers as weak symbols and make them aliases of the default handler. + */ + +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"))); +} + +#endif INIT_HIGH_H diff --git a/init_low.s b/init_low.s index 1c3d10e..4f84246 100644 --- a/init_low.s +++ b/init_low.s @@ -1,77 +1,7 @@ -/* -https://github.com/dwelch67/stm32_samples -http://stackoverflow.com/questions/9565921/cortex-m3-initialisation -*/ - .syntax unified .cpu cortex-m3 .thumb -.section .isr_vectors - -/* TODO: Move this to C code */ -.global vectors -vectors: - .word 0x20001000 /* TODO: this should come from the linker */ - .word _Reset_Handler - .word NMI_Handler - .word HardFault_Handler - .word MemManage_Handler - .word BusFault_Handler - .word UsageFault_Handler - .word 0 /* Not used */ - .word 0 /* Not used */ - .word 0 /* Not used */ - .word 0 /* Not used */ - .word SVC_Handler - .word DebugMon_Handler - .word 0 /* Not used */ - .word PendSV_Handler - .word SysTick_Handler - .word WWDG_IRQHandler - .word PVD_IRQHandler - .word TAMPER_IRQHandler - .word RTC_IRQHandler - .word FLASH_IRQHandler - .word RCC_IRQHandler - .word EXTI0_IRQHandler - .word EXTI1_IRQHandler - .word EXTI2_IRQHandler - .word EXTI3_IRQHandler - .word EXTI4_IRQHandler - .word DMA1_Channel1_IRQHandler - .word DMA1_Channel2_IRQHandler - .word DMA1_Channel3_IRQHandler - .word DMA1_Channel4_IRQHandler - .word DMA1_Channel5_IRQHandler - .word DMA1_Channel6_IRQHandler - .word DMA1_Channel7_IRQHandler - .word ADC1_2_IRQHandler - .word USB_HP_CAN1_TX_IRQHandler - .word USB_LP_CAN1_RX0_IRQHandler - .word CAN1_RX1_IRQHandler - .word CAN1_SCE_IRQHandler - .word EXTI9_5_IRQHandler - .word TIM1_BRK_IRQHandler - .word TIM1_UP_IRQHandler - .word TIM1_TRG_COM_IRQHandler - .word TIM1_CC_IRQHandler - .word TIM2_IRQHandler - .word TIM3_IRQHandler - .word TIM4_IRQHandler - .word I2C1_EV_IRQHandler - .word I2C1_ER_IRQHandler - .word I2C2_EV_IRQHandler - .word I2C2_ER_IRQHandler - .word SPI1_IRQHandler - .word SPI2_IRQHandler - .word USART1_IRQHandler - .word USART2_IRQHandler - .word USART3_IRQHandler - .word EXTI15_10_IRQHandler - .word RTCAlarm_IRQHandler - .word USBWakeUp_IRQHandler - /* VERY significant */ .section .text @@ -110,150 +40,5 @@ BusFault_Handler: UsageFault_Handler: b halt -/* -TODO: replace with functions like this: -void TIM2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler"))); -*/ - -.weak SVC_Handler -.thumb_set SVC_Handler, halt - -.weak DebugMon_Handler -.thumb_set DebugMon_Handler, halt - -.weak PendSV_Handler -.thumb_set PendSV_Handler, halt - -.weak SysTick_Handler -.thumb_set SysTick_Handler, halt - -.weak WWDG_IRQHandler -.thumb_set WWDG_IRQHandler, halt - -.weak PVD_IRQHandler -.thumb_set PVD_IRQHandler, halt - -.weak TAMPER_IRQHandler -.thumb_set TAMPER_IRQHandler, halt - -.weak RTC_IRQHandler -.thumb_set RTC_IRQHandler, halt - -.weak FLASH_IRQHandler -.thumb_set FLASH_IRQHandler, halt - -.weak RCC_IRQHandler -.thumb_set RCC_IRQHandler, halt - -.weak EXTI0_IRQHandler -.thumb_set EXTI0_IRQHandler, halt - -.weak EXTI1_IRQHandler -.thumb_set EXTI1_IRQHandler, halt - -.weak EXTI2_IRQHandler -.thumb_set EXTI2_IRQHandler, halt - -.weak EXTI3_IRQHandler -.thumb_set EXTI3_IRQHandler, halt - -.weak EXTI4_IRQHandler -.thumb_set EXTI4_IRQHandler, halt - -.weak DMA1_Channel1_IRQHandler -.thumb_set DMA1_Channel1_IRQHandler, halt - -.weak DMA1_Channel2_IRQHandler -.thumb_set DMA1_Channel2_IRQHandler, halt - -.weak DMA1_Channel3_IRQHandler -.thumb_set DMA1_Channel3_IRQHandler, halt - -.weak DMA1_Channel4_IRQHandler -.thumb_set DMA1_Channel4_IRQHandler, halt - -.weak DMA1_Channel5_IRQHandler -.thumb_set DMA1_Channel5_IRQHandler, halt - -.weak DMA1_Channel6_IRQHandler -.thumb_set DMA1_Channel6_IRQHandler, halt - -.weak DMA1_Channel7_IRQHandler -.thumb_set DMA1_Channel7_IRQHandler, halt - -.weak ADC1_2_IRQHandler -.thumb_set ADC1_2_IRQHandler, halt - -.weak USB_HP_CAN1_TX_IRQHandler -.thumb_set USB_HP_CAN1_TX_IRQHandler, halt - -.weak USB_LP_CAN1_RX0_IRQHandler -.thumb_set USB_LP_CAN1_RX0_IRQHandler, halt - -.weak CAN1_RX1_IRQHandler -.thumb_set CAN1_RX1_IRQHandler, halt - -.weak CAN1_SCE_IRQHandler -.thumb_set CAN1_SCE_IRQHandler, halt - -.weak EXTI9_5_IRQHandler -.thumb_set EXTI9_5_IRQHandler, halt - -.weak TIM1_BRK_IRQHandler -.thumb_set TIM1_BRK_IRQHandler, halt - -.weak TIM1_UP_IRQHandler -.thumb_set TIM1_UP_IRQHandler, halt - -.weak TIM1_TRG_COM_IRQHandler -.thumb_set TIM1_TRG_COM_IRQHandler, halt - -.weak TIM1_CC_IRQHandler -.thumb_set TIM1_CC_IRQHandler, halt - -.weak TIM2_IRQHandler -.thumb_set TIM2_IRQHandler, halt - -.weak TIM3_IRQHandler -.thumb_set TIM3_IRQHandler, halt - -.weak TIM4_IRQHandler -.thumb_set TIM4_IRQHandler, halt - -.weak I2C1_EV_IRQHandler -.thumb_set I2C1_EV_IRQHandler, halt - -.weak I2C1_ER_IRQHandler -.thumb_set I2C1_ER_IRQHandler, halt - -.weak I2C2_EV_IRQHandler -.thumb_set I2C2_EV_IRQHandler, halt - -.weak I2C2_ER_IRQHandler -.thumb_set I2C2_ER_IRQHandler, halt - -.weak SPI1_IRQHandler -.thumb_set SPI1_IRQHandler, halt - -.weak SPI2_IRQHandler -.thumb_set SPI2_IRQHandler, halt - -.weak USART1_IRQHandler -.thumb_set USART1_IRQHandler, halt - -.weak USART2_IRQHandler -.thumb_set USART2_IRQHandler, halt - -.weak USART3_IRQHandler -.thumb_set USART3_IRQHandler, halt - -.weak EXTI15_10_IRQHandler -.thumb_set EXTI15_10_IRQHandler, halt - -.weak RTCAlarm_IRQHandler -.thumb_set RTCAlarm_IRQHandler, halt - -.weak USBWakeUp_IRQHandler -.thumb_set USBWakeUp_IRQHandler, halt - .end + -- cgit v1.2.3