From a6dc2b0ad2bf5efd2c9f49754ff7057f5c24a929 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sun, 12 Jun 2011 21:45:45 +0200 Subject: Added interrupt<>() template. --- SConstruct | 2 +- interrupt.cpp | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ interrupt.h | 80 ++++++++++++++++++++++++++++++ main.cpp | 11 ---- 4 files changed, 238 insertions(+), 12 deletions(-) create mode 100644 interrupt.cpp create mode 100644 interrupt.h diff --git a/SConstruct b/SConstruct index a13059a..6d3566a 100644 --- a/SConstruct +++ b/SConstruct @@ -34,7 +34,7 @@ sources = \ Glob('chibios/os/hal/platforms/STM32/*.c') #firmware = env.Program('suzumebachi.elf', Glob('*.cpp') + Glob('*.c') + sources) -firmware = env.Program('suzumebachi.elf', ['main.cpp', 'entry.cpp', 'rcc.cpp']) +firmware = env.Program('suzumebachi.elf', ['main.cpp', 'entry.cpp', 'interrupt.cpp', 'rcc.cpp']) env.Depends(firmware, 'suzumebachi.ld') env.Command('prog', ['suzumebachi.elf'], 'openocd -f openocd.cfg -c flash_chip') diff --git a/interrupt.cpp b/interrupt.cpp new file mode 100644 index 0000000..e9e7b24 --- /dev/null +++ b/interrupt.cpp @@ -0,0 +1,157 @@ +#include "interrupt.h" + +void entry(); + +extern "C" void unused_interrupt() { + while(1) {} +} + +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); +template<> void interrupt() __attribute__ ((weak, alias ("unused_interrupt"))); + +typedef void (*vector_t)(); + +vector_t vectors[] __attribute__((section(".vectors"))) = { + (vector_t)0x20004ffc, + entry, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + 0, + 0, + 0, + 0, + interrupt, + 0, + 0, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, + interrupt, +}; diff --git a/interrupt.h b/interrupt.h new file mode 100644 index 0000000..cfc187d --- /dev/null +++ b/interrupt.h @@ -0,0 +1,80 @@ +#ifndef INTERRUPT_H +#define INTERRUPT_H + +namespace Interrupt { + enum Interrupt { + NMI, + HardFault, + MemManage, + BusFault, + UsageFault, + SVCall, + PendSV, + SysTick, + WWDG, + PVD, + TAMPER, + RTC, + FLASH, + RCC, + EXTI0, + EXTI1, + EXTI2, + EXTI3, + EXTI4, + DMA1_Channel1, + DMA1_Channel2, + DMA1_Channel3, + DMA1_Channel4, + DMA1_Channel5, + DMA1_Channel6, + DMA1_Channel7, + ADC1_2, + USB_HP_CAN_TX, + USB_LP_CAN_RX0, + CAN_RX1, + CAN_SCE, + EXTI9_5, + TIM1_BRK, + TIM1_UP, + TIM1_TRG_COM, + TIM1_CC, + TIM2, + TIM3, + TIM4, + I2C1_EV, + I2C1_ER, + I2C2_EV, + I2C2_ER, + SPI1, + SPI2, + USART1, + USART2, + USART3, + EXTI15_10, + RTCAlarm, + USBWakeup, + TIM8_BRK, + TIM8_UP, + TIM8_TRG_COM, + TIM8_CC, + ADC3, + FSMC, + SDIO, + TIM5, + SPI3, + UART4, + UART5, + TIM6, + TIM7, + DMA2_Channel1, + DMA2_Channel2, + DMA2_Channel3, + DMA2_Channel4_5 + }; +}; + +template +void interrupt(); + +#endif diff --git a/main.cpp b/main.cpp index 9c4774b..468a0b9 100644 --- a/main.cpp +++ b/main.cpp @@ -1,16 +1,5 @@ #include "stm32.h" -void entry(); - -void* vectors[4] __attribute__((section(".vectors"))) = { - (void*)0x20004ffc, - (void*)entry - //(unsigned int *) STACK_TOP, // stack pointer - //(unsigned int *) main, // code entry point - //(unsigned int *) nmi_handler, // NMI handler (not really) - //(unsigned int *) hardfault_handler // hard fault handler (let's hope not) -}; - volatile unsigned int cnt; void i2c_write_reg(uint8_t addr, uint8_t reg, uint8_t data) { -- cgit v1.2.3