/* 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 | |