diff --git a/lib/efm32/tinygecko/vector.c b/lib/efm32/tinygecko/vector.c index 624785e4..fb8fbd4b 100644 --- a/lib/efm32/tinygecko/vector.c +++ b/lib/efm32/tinygecko/vector.c @@ -18,6 +18,7 @@ * along with this program. If not, see . */ +#include #include #define WEAK __attribute__ ((weak)) @@ -26,10 +27,9 @@ extern unsigned _etext, _data, _edata, _ebss, _stack; void main(void); -void reset_handler(void); void blocking_handler(void); -void null_handler(void); +void WEAK reset_handler(void); void WEAK nmi_handler(void); void WEAK hard_fault_handler(void); void WEAK mem_manage_handler(void); @@ -40,6 +40,29 @@ void WEAK debug_monitor_handler(void); void WEAK pend_sv_handler(void); void WEAK sys_tick_handler(void); +void WEAK dma_isr(void); +void WEAK gpio_even_isr(void); +void WEAK timer0_isr(void); +void WEAK usart0_rx_isr(void); +void WEAK usart0_tx_isr(void); +void WEAK acmp01_isr(void); +void WEAK adc0_isr(void); +void WEAK dac0_isr(void); +void WEAK i2c0_isr(void); +void WEAK gpio_odd_isr(void); +void WEAK timer1_isr(void); +void WEAK usart1_rx_isr(void); +void WEAK usart1_tx_isr(void); +void WEAK lesense_isr(void); +void WEAK leuart0_isr(void); +void WEAK letimer0_isr(void); +void WEAK pcnt0_isr(void); +void WEAK rtc_isr(void); +void WEAK cmu_isr(void); +void WEAK vcmp_isr(void); +void WEAK lcd_isr(void); +void WEAK msc_isr(void); +void WEAK aes_isr(void); __attribute__ ((section(".vectors"))) efm32_vector_table_t vector_table = { @@ -53,9 +76,34 @@ efm32_vector_table_t vector_table = { .sv_call = sv_call_handler, .pend_sv = pend_sv_handler, .systick = sys_tick_handler, + .irq = { + [IRQ_DMA] = dma_isr, + [IRQ_GPIO_EVEN] = gpio_even_isr, + [IRQ_TIMER0] = timer0_isr, + [IRQ_USART0_RX] = usart0_rx_isr, + [IRQ_USART0_TX] = usart0_tx_isr, + [IRQ_ACMP01] = acmp01_isr, + [IRQ_ADC0] = adc0_isr, + [IRQ_DAC0] = dac0_isr, + [IRQ_I2C0] = i2c0_isr, + [IRQ_GPIO_ODD] = gpio_odd_isr, + [IRQ_TIMER1] = timer1_isr, + [IRQ_USART1_RX] = usart1_rx_isr, + [IRQ_USART1_TX] = usart1_tx_isr, + [IRQ_LESENSE] = lesense_isr, + [IRQ_LEUART0] = leuart0_isr, + [IRQ_LETIMER0] = letimer0_isr, + [IRQ_PCNT0] = pcnt0_isr, + [IRQ_RTC] = rtc_isr, + [IRQ_CMU] = cmu_isr, + [IRQ_VCMP] = vcmp_isr, + [IRQ_LCD] = lcd_isr, + [IRQ_MSC] = msc_isr, + [IRQ_AES] = aes_isr, + } }; -void reset_handler(void) +void WEAK reset_handler(void) { volatile unsigned *src, *dest; @@ -76,17 +124,36 @@ void blocking_handler(void) while (1) ; } -void null_handler(void) -{ - /* Do nothing. */ -} - -#pragma weak nmi_handler = null_handler +#pragma weak nmi_handler = blocking_handler #pragma weak hard_fault_handler = blocking_handler #pragma weak mem_manage_handler = blocking_handler #pragma weak bus_fault_handler = blocking_handler #pragma weak usage_fault_handler = blocking_handler -#pragma weak sv_call_handler = null_handler -#pragma weak debug_monitor_handler = null_handler -#pragma weak pend_sv_handler = null_handler -#pragma weak sys_tick_handler = null_handler +#pragma weak sv_call_handler = blocking_handler +#pragma weak debug_monitor_handler = blocking_handler +#pragma weak pend_sv_handler = blocking_handler +#pragma weak sys_tick_handler = blocking_handler + +#pragma weak dma_isr = blocking_handler +#pragma weak gpio_even_isr = blocking_handler +#pragma weak timer0_isr = blocking_handler +#pragma weak usart0_rx_isr = blocking_handler +#pragma weak usart0_tx_isr = blocking_handler +#pragma weak acmp01_isr = blocking_handler +#pragma weak adc0_isr = blocking_handler +#pragma weak dac0_isr = blocking_handler +#pragma weak i2c0_isr = blocking_handler +#pragma weak gpio_odd_isr = blocking_handler +#pragma weak timer1_isr = blocking_handler +#pragma weak usart1_rx_isr = blocking_handler +#pragma weak usart1_tx_isr = blocking_handler +#pragma weak lesense_isr = blocking_handler +#pragma weak leuart0_isr = blocking_handler +#pragma weak letimer0_isr = blocking_handler +#pragma weak pcnt0_isr = blocking_handler +#pragma weak rtc_isr = blocking_handler +#pragma weak cmu_isr = blocking_handler +#pragma weak vcmp_isr = blocking_handler +#pragma weak lcd_isr = blocking_handler +#pragma weak msc_isr = blocking_handler +#pragma weak aes_isr = blocking_handler