| /* modrx.c -- wireless controller receiver for robots | |
| Copyright 2004 Robotronics, Inc. | |
| Author Jefferson Smith | |
| This file is part of the Modular Robot Design. | |
| */ | |
| #include "cpu.h" | |
| #include <sys/ports.h> | |
| #include <sys/interrupts.h> | |
| void fatal_interrupt () | |
| { | |
| /* Infinite loop for debugging | |
| Returning would not help as it's necessary to clear the interrupt flag. | |
| */ | |
| for (;;) cop_optional_reset(); | |
| } | |
| #ifdef USE_INTERRUPT_TABLE | |
| /* NOTE: these ISR must be in non-banked memory (near) */ | |
| /* Manual context switch function. This is the SWI ISR. */ | |
| void ATTR_INT ATTR_NEAR vPortYield( void ); | |
| /* Tick context switch function. This is the timer ISR. */ | |
| void ATTR_INT ATTR_NEAR vPortTickInterrupt( void ); | |
| void ATTR_INT ATTR_NEAR vCOM_ISR( void ); | |
| /* Interrupt vectors table. | |
| Note: the `XXX_handler: foo' notation is a GNU extension which is | |
| used here to ensure correct association of the handler in the struct. | |
| This is why the order of handlers declared below does not follow | |
| the MCU order. */ | |
| const struct interrupt_vectors __attribute__((section(".vectors"))) vectors = | |
| { | |
| pwm_shutdown_handler: fatal_interrupt, | |
| ptpif_handler: fatal_interrupt, | |
| can4_tx_handler: fatal_interrupt, | |
| can4_rx_handler: fatal_interrupt, | |
| can4_err_handler: fatal_interrupt, | |
| can4_wake_handler: fatal_interrupt, | |
| can3_tx_handler: fatal_interrupt, | |
| can3_rx_handler: fatal_interrupt, | |
| can3_err_handler: fatal_interrupt, | |
| can3_wake_handler: fatal_interrupt, | |
| can2_tx_handler: fatal_interrupt, | |
| can2_rx_handler: fatal_interrupt, | |
| can2_err_handler: fatal_interrupt, | |
| can2_wake_handler: fatal_interrupt, | |
| can1_tx_handler: fatal_interrupt, | |
| can1_rx_handler: fatal_interrupt, | |
| can1_err_handler: fatal_interrupt, | |
| can1_wake_handler: fatal_interrupt, | |
| can0_tx_handler: fatal_interrupt, | |
| can0_rx_handler: fatal_interrupt, | |
| can0_err_handler: fatal_interrupt, | |
| can0_wake_handler: fatal_interrupt, | |
| flash_handler: fatal_interrupt, | |
| eeprom_handler: fatal_interrupt, | |
| spi2_handler: fatal_interrupt, | |
| spi1_handler: fatal_interrupt, | |
| iic_handler: fatal_interrupt, | |
| bdlc_handler: fatal_interrupt, | |
| selfclk_mode_handler: fatal_interrupt, | |
| pll_lock_handler: fatal_interrupt, | |
| accb_overflow_handler: fatal_interrupt, | |
| mccnt_underflow_handler: fatal_interrupt, | |
| pthif_handler: fatal_interrupt, | |
| ptjif_handler: fatal_interrupt, | |
| atd1_handler: fatal_interrupt, | |
| atd0_handler: fatal_interrupt, | |
| sci1_handler: fatal_interrupt, | |
| sci0_handler: fatal_interrupt, | |
| spi0_handler: fatal_interrupt, | |
| /** Timer and Accumulator */ | |
| acca_input_handler: fatal_interrupt, | |
| acca_overflow_handler: fatal_interrupt, | |
| timer_overflow_handler: fatal_interrupt, | |
| /** Input capture / Output compare Timers */ | |
| tc7_handler: fatal_interrupt, | |
| tc6_handler: fatal_interrupt, | |
| tc5_handler: fatal_interrupt, | |
| tc4_handler: fatal_interrupt, | |
| tc3_handler: fatal_interrupt, | |
| tc2_handler: fatal_interrupt, | |
| tc1_handler: fatal_interrupt, | |
| tc0_handler: fatal_interrupt, | |
| /** External Interrupts */ | |
| rtii_handler: fatal_interrupt, | |
| irq_handler: fatal_interrupt, | |
| xirq_handler: fatal_interrupt, | |
| illegal_handler: fatal_interrupt, | |
| cop_fail_handler: fatal_interrupt, | |
| cop_clock_handler: fatal_interrupt, | |
| /** Vectors in use */ | |
| swi_handler: vPortYield, | |
| rtii_handler: vPortTickInterrupt, | |
| #if M6812_DEF_SCI==1 | |
| sci1_handler: vCOM_ISR, | |
| #else | |
| sci0_handler: vCOM_ISR, | |
| #endif | |
| reset_handler: _start | |
| }; | |
| #endif | |