/* * Copyright (c) 2013 Travis Geiselbrecht * * Use of this source code is governed by a MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT */ #include #include #include /* un-overridden irq handler */ void stellaris_dummy_irq(void) { arm_cm_irq_entry(); panic("unhandled irq\n"); } extern void stellaris_uart_irq(void); /* a list of default handlers that are simply aliases to the dummy handler */ #define DEFAULT_HANDLER(x) \ void stellaris_##x##_irq(void) __WEAK_ALIAS("stellaris_dummy_irq") DEFAULT_HANDLER(gpio_porta); DEFAULT_HANDLER(gpio_portb); DEFAULT_HANDLER(gpio_portc); DEFAULT_HANDLER(gpio_portd); DEFAULT_HANDLER(gpio_porte); DEFAULT_HANDLER(uart0); DEFAULT_HANDLER(uart1); DEFAULT_HANDLER(ssi0); DEFAULT_HANDLER(i2c0); DEFAULT_HANDLER(pwm_fault); DEFAULT_HANDLER(pwm_gen0); DEFAULT_HANDLER(pwm_gen1); DEFAULT_HANDLER(pwm_gen2); DEFAULT_HANDLER(quad_encoder0); DEFAULT_HANDLER(adc_seq0); DEFAULT_HANDLER(adc_seq1); DEFAULT_HANDLER(adc_seq2); DEFAULT_HANDLER(adc_seq3); DEFAULT_HANDLER(watchdog_timer); DEFAULT_HANDLER(timer0_subtimerA); DEFAULT_HANDLER(timer0_subtimerB); DEFAULT_HANDLER(timer1_subtimerA); DEFAULT_HANDLER(timer1_subtimerB); DEFAULT_HANDLER(timer2_subtimerA); DEFAULT_HANDLER(timer2_subtimerB); DEFAULT_HANDLER(analog_comp0); DEFAULT_HANDLER(analog_comp1); DEFAULT_HANDLER(analog_comp2); DEFAULT_HANDLER(sys_control); DEFAULT_HANDLER(flash_control); DEFAULT_HANDLER(gpio_portf); DEFAULT_HANDLER(gpio_portg); DEFAULT_HANDLER(gpio_porth); DEFAULT_HANDLER(uart2); DEFAULT_HANDLER(ssi1); DEFAULT_HANDLER(timer3_subtimerA); DEFAULT_HANDLER(timer3_subtimerB); DEFAULT_HANDLER(i2c1); DEFAULT_HANDLER(quad_encoder1); DEFAULT_HANDLER(can0); DEFAULT_HANDLER(can1); DEFAULT_HANDLER(can2); DEFAULT_HANDLER(ethernet); DEFAULT_HANDLER(hibernate); DEFAULT_HANDLER(usb0); DEFAULT_HANDLER(pwm_gen3); DEFAULT_HANDLER(udma_software); DEFAULT_HANDLER(udma_error); DEFAULT_HANDLER(ad1_seq0); DEFAULT_HANDLER(ad1_seq1); DEFAULT_HANDLER(ad1_seq2); DEFAULT_HANDLER(ad1_seq3); DEFAULT_HANDLER(i2s0); DEFAULT_HANDLER(ext_bus0); DEFAULT_HANDLER(gpio_portj); DEFAULT_HANDLER(gpio_portk); DEFAULT_HANDLER(gpio_portl); DEFAULT_HANDLER(ssi2); DEFAULT_HANDLER(ssi3); DEFAULT_HANDLER(uart3); DEFAULT_HANDLER(uart4); DEFAULT_HANDLER(uart5); DEFAULT_HANDLER(uart6); DEFAULT_HANDLER(uart7); DEFAULT_HANDLER(i2c2); DEFAULT_HANDLER(i2c3); DEFAULT_HANDLER(timer4_subtimerA); DEFAULT_HANDLER(timer4_subtimerB); DEFAULT_HANDLER(timer5_subtimerA); DEFAULT_HANDLER(timer5_subtimerB); DEFAULT_HANDLER(wide_timer0_subtimerA); DEFAULT_HANDLER(wide_timer0_subtimerB); DEFAULT_HANDLER(wide_timer1_subtimerA); DEFAULT_HANDLER(wide_timer1_subtimerB); DEFAULT_HANDLER(wide_timer2_subtimerA); DEFAULT_HANDLER(wide_timer2_subtimerB); DEFAULT_HANDLER(wide_timer3_subtimerA); DEFAULT_HANDLER(wide_timer3_subtimerB); DEFAULT_HANDLER(wide_timer4_subtimerA); DEFAULT_HANDLER(wide_timer4_subtimerB); DEFAULT_HANDLER(wide_timer5_subtimerA); DEFAULT_HANDLER(wide_timer6_subtimerB); DEFAULT_HANDLER(fpu); DEFAULT_HANDLER(peci0); DEFAULT_HANDLER(lpc0); DEFAULT_HANDLER(i2c4); DEFAULT_HANDLER(i2c5); DEFAULT_HANDLER(gpio_portm); DEFAULT_HANDLER(gpio_portn); DEFAULT_HANDLER(quad_encoder2); DEFAULT_HANDLER(fan0); DEFAULT_HANDLER(gpio_portp0); DEFAULT_HANDLER(gpio_portp1); DEFAULT_HANDLER(gpio_portp2); DEFAULT_HANDLER(gpio_portp3); DEFAULT_HANDLER(gpio_portp4); DEFAULT_HANDLER(gpio_portp5); DEFAULT_HANDLER(gpio_portp6); DEFAULT_HANDLER(gpio_portp7); DEFAULT_HANDLER(gpio_portq0); DEFAULT_HANDLER(gpio_portq1); DEFAULT_HANDLER(gpio_portq2); DEFAULT_HANDLER(gpio_portq3); DEFAULT_HANDLER(gpio_portq4); DEFAULT_HANDLER(gpio_portq5); DEFAULT_HANDLER(gpio_portq6); DEFAULT_HANDLER(gpio_portq7); DEFAULT_HANDLER(gpio_portr); DEFAULT_HANDLER(gpio_ports); DEFAULT_HANDLER(pwm1_gen0); DEFAULT_HANDLER(pwm1_gen1); DEFAULT_HANDLER(pwm1_gen2); DEFAULT_HANDLER(pwm1_gen3); DEFAULT_HANDLER(pwm1_fault); #define VECTAB_ENTRY(x) stellaris_##x##_irq const void *const __SECTION(".text.boot.vectab2") vectab2[] = { VECTAB_ENTRY(gpio_porta), // GPIO Port A VECTAB_ENTRY(gpio_portb), // GPIO Port B VECTAB_ENTRY(gpio_portc), // GPIO Port C VECTAB_ENTRY(gpio_portd), // GPIO Port D VECTAB_ENTRY(gpio_porte), // GPIO Port E VECTAB_ENTRY(uart0), // UART0 Rx and Tx VECTAB_ENTRY(uart1), // UART1 Rx and Tx VECTAB_ENTRY(ssi0), // SSI0 Rx and Tx VECTAB_ENTRY(i2c0), // I2C0 Master and Slave VECTAB_ENTRY(pwm_fault), // PWM Fault VECTAB_ENTRY(pwm_gen0), // PWM Generator 0 VECTAB_ENTRY(pwm_gen1), // PWM Generator 1 VECTAB_ENTRY(pwm_gen2), // PWM Generator 2 VECTAB_ENTRY(quad_encoder0), // Quadrature Encoder 0 VECTAB_ENTRY(adc_seq0), // ADC Sequence 0 VECTAB_ENTRY(adc_seq1), // ADC Sequence 1 VECTAB_ENTRY(adc_seq2), // ADC Sequence 2 VECTAB_ENTRY(adc_seq3), // ADC Sequence 3 VECTAB_ENTRY(watchdog_timer), // Watchdog timer VECTAB_ENTRY(timer0_subtimerA), // Timer 0 subtimer A VECTAB_ENTRY(timer0_subtimerB), // Timer 0 subtimer B VECTAB_ENTRY(timer1_subtimerA), // Timer 1 subtimer A VECTAB_ENTRY(timer1_subtimerB), // Timer 1 subtimer B VECTAB_ENTRY(timer2_subtimerA), // Timer 2 subtimer A VECTAB_ENTRY(timer2_subtimerB), // Timer 2 subtimer B VECTAB_ENTRY(analog_comp0), // Analog Comparator 0 VECTAB_ENTRY(analog_comp1), // Analog Comparator 1 VECTAB_ENTRY(analog_comp2), // Analog Comparator 2 VECTAB_ENTRY(sys_control), // System Control (PLL, OSC, BO) VECTAB_ENTRY(flash_control), // FLASH Control VECTAB_ENTRY(gpio_portf), // GPIO Port F VECTAB_ENTRY(gpio_portg), // GPIO Port G VECTAB_ENTRY(gpio_porth), // GPIO Port H VECTAB_ENTRY(uart2), // UART2 Rx and Tx VECTAB_ENTRY(ssi1), // SSI1 Rx and Tx VECTAB_ENTRY(timer3_subtimerA), // Timer 3 subtimer A VECTAB_ENTRY(timer3_subtimerB), // Timer 3 subtimer B VECTAB_ENTRY(i2c1), // I2C1 Master and Slave VECTAB_ENTRY(quad_encoder1), // Quadrature Encoder 1 VECTAB_ENTRY(can0), // CAN0 VECTAB_ENTRY(can1), // CAN1 VECTAB_ENTRY(can2), // CAN2 VECTAB_ENTRY(ethernet), // Ethernet VECTAB_ENTRY(hibernate), // Hibernate VECTAB_ENTRY(usb0), // USB0 VECTAB_ENTRY(pwm_gen3), // PWM Generator 3 VECTAB_ENTRY(udma_software), // uDMA Software Transfer VECTAB_ENTRY(udma_error), // uDMA Error VECTAB_ENTRY(ad1_seq0), // ADC1 Sequence 0 VECTAB_ENTRY(ad1_seq1), // ADC1 Sequence 1 VECTAB_ENTRY(ad1_seq2), // ADC1 Sequence 2 VECTAB_ENTRY(ad1_seq3), // ADC1 Sequence 3 VECTAB_ENTRY(i2s0), // I2S0 VECTAB_ENTRY(ext_bus0), // External Bus Interface 0 VECTAB_ENTRY(gpio_portj), // GPIO Port J VECTAB_ENTRY(gpio_portk), // GPIO Port K VECTAB_ENTRY(gpio_portl), // GPIO Port L VECTAB_ENTRY(ssi2), // SSI2 Rx and Tx VECTAB_ENTRY(ssi3), // SSI3 Rx and Tx VECTAB_ENTRY(uart3), // UART3 Rx and Tx VECTAB_ENTRY(uart4), // UART4 Rx and Tx VECTAB_ENTRY(uart5), // UART5 Rx and Tx VECTAB_ENTRY(uart6), // UART6 Rx and Tx VECTAB_ENTRY(uart7), // UART7 Rx and Tx VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(i2c2), // I2C2 Master and Slave VECTAB_ENTRY(i2c3), // I2C3 Master and Slave VECTAB_ENTRY(timer4_subtimerA), // Timer 4 subtimer A VECTAB_ENTRY(timer4_subtimerB), // Timer 4 subtimer B VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(timer5_subtimerA), // Timer 5 subtimer A VECTAB_ENTRY(timer5_subtimerB), // Timer 5 subtimer B VECTAB_ENTRY(wide_timer0_subtimerA), // Wide Timer 0 subtimer A VECTAB_ENTRY(wide_timer0_subtimerB), // Wide Timer 0 subtimer B VECTAB_ENTRY(wide_timer1_subtimerA), // Wide Timer 1 subtimer A VECTAB_ENTRY(wide_timer1_subtimerB), // Wide Timer 1 subtimer B VECTAB_ENTRY(wide_timer2_subtimerA), // Wide Timer 2 subtimer A VECTAB_ENTRY(wide_timer2_subtimerB), // Wide Timer 2 subtimer B VECTAB_ENTRY(wide_timer3_subtimerA), // Wide Timer 3 subtimer A VECTAB_ENTRY(wide_timer3_subtimerB), // Wide Timer 3 subtimer B VECTAB_ENTRY(wide_timer4_subtimerA), // Wide Timer 4 subtimer A VECTAB_ENTRY(wide_timer4_subtimerB), // Wide Timer 4 subtimer B VECTAB_ENTRY(wide_timer5_subtimerA), // Wide Timer 5 subtimer A VECTAB_ENTRY(wide_timer6_subtimerB), // Wide Timer 5 subtimer B VECTAB_ENTRY(fpu), // FPU VECTAB_ENTRY(peci0), // PECI 0 VECTAB_ENTRY(lpc0), // LPC 0 VECTAB_ENTRY(i2c4), // I2C4 Master and Slave VECTAB_ENTRY(i2c5), // I2C5 Master and Slave VECTAB_ENTRY(gpio_portm), // GPIO Port M VECTAB_ENTRY(gpio_portn), // GPIO Port N VECTAB_ENTRY(quad_encoder2), // Quadrature Encoder 2 VECTAB_ENTRY(fan0), // Fan 0 VECTAB_ENTRY(dummy), // Reserved VECTAB_ENTRY(gpio_portp0), // GPIO Port P (Summary or P0) VECTAB_ENTRY(gpio_portp1), // GPIO Port P1 VECTAB_ENTRY(gpio_portp2), // GPIO Port P2 VECTAB_ENTRY(gpio_portp3), // GPIO Port P3 VECTAB_ENTRY(gpio_portp4), // GPIO Port P4 VECTAB_ENTRY(gpio_portp5), // GPIO Port P5 VECTAB_ENTRY(gpio_portp6), // GPIO Port P6 VECTAB_ENTRY(gpio_portp7), // GPIO Port P7 VECTAB_ENTRY(gpio_portq0), // GPIO Port Q (Summary or Q0) VECTAB_ENTRY(gpio_portq1), // GPIO Port Q1 VECTAB_ENTRY(gpio_portq2), // GPIO Port Q2 VECTAB_ENTRY(gpio_portq3), // GPIO Port Q3 VECTAB_ENTRY(gpio_portq4), // GPIO Port Q4 VECTAB_ENTRY(gpio_portq5), // GPIO Port Q5 VECTAB_ENTRY(gpio_portq6), // GPIO Port Q6 VECTAB_ENTRY(gpio_portq7), // GPIO Port Q7 VECTAB_ENTRY(gpio_portr), // GPIO Port R VECTAB_ENTRY(gpio_ports), // GPIO Port S VECTAB_ENTRY(pwm1_gen0), // PWM 1 Generator 0 VECTAB_ENTRY(pwm1_gen1), // PWM 1 Generator 1 VECTAB_ENTRY(pwm1_gen2), // PWM 1 Generator 2 VECTAB_ENTRY(pwm1_gen3), // PWM 1 Generator 3 VECTAB_ENTRY(pwm1_fault) // PWM 1 Fault };