AVR_SELFPROG_DECLARE(SPMCSR, SPMEN, SPM_READY_vect),
AVR_WATCHDOG_DECLARE(WDTCSR, WDT_vect),
.extint = {
- AVR_EXTINT_DECLARE(0, 'D', PD0),
- AVR_EXTINT_DECLARE(1, 'D', PD1),
- AVR_EXTINT_DECLARE(2, 'D', PD2),
- AVR_EXTINT_DECLARE(3, 'D', PD3),
- AVR_EXTINT_DECLARE(4, 'C', PC7),
- AVR_EXTINT_DECLARE(5, 'D', PD4),
- AVR_EXTINT_DECLARE(6, 'D', PD6),
- AVR_EXTINT_DECLARE(7, 'D', PD7),
+ AVR_EXTINT_MEGA_DECLARE(0, 'D', PD0, A),
+ AVR_EXTINT_MEGA_DECLARE(1, 'D', PD1, A),
+ AVR_EXTINT_MEGA_DECLARE(2, 'D', PD2, A),
+ AVR_EXTINT_MEGA_DECLARE(3, 'D', PD3, A),
+ AVR_EXTINT_MEGA_DECLARE(4, 'C', PC7, B),
+ AVR_EXTINT_MEGA_DECLARE(5, 'D', PD4, B),
+ AVR_EXTINT_MEGA_DECLARE(6, 'D', PD6, B),
+ AVR_EXTINT_MEGA_DECLARE(7, 'D', PD7, B),
},
.portb = {
.name = 'B', .r_port = PORTB, .r_ddr = DDRB, .r_pin = PINB,
AVR_SELFPROG_DECLARE(SPMCSR, SPMEN, SPM_READY_vect),
AVR_WATCHDOG_DECLARE_128(WDTCR, _VECTOR(0)),
.extint = {
- AVR_EXTINT_DECLARE(0, 'D', PD0),
- AVR_EXTINT_DECLARE(1, 'D', PD1),
- AVR_EXTINT_DECLARE(2, 'D', PD2),
- AVR_EXTINT_DECLARE(3, 'D', PD3),
- AVR_EXTINT_DECLARE(4, 'E', PE4),
- AVR_EXTINT_DECLARE(5, 'E', PE5),
- AVR_EXTINT_DECLARE(6, 'E', PE6),
- AVR_EXTINT_DECLARE(7, 'E', PE7),
+ AVR_EXTINT_MEGA_DECLARE(0, 'D', PD0, A),
+ AVR_EXTINT_MEGA_DECLARE(1, 'D', PD1, A),
+ AVR_EXTINT_MEGA_DECLARE(2, 'D', PD2, A),
+ AVR_EXTINT_MEGA_DECLARE(3, 'D', PD3, A),
+ AVR_EXTINT_MEGA_DECLARE(4, 'E', PE4, B),
+ AVR_EXTINT_MEGA_DECLARE(5, 'E', PE5, B),
+ AVR_EXTINT_MEGA_DECLARE(6, 'E', PE6, B),
+ AVR_EXTINT_MEGA_DECLARE(7, 'E', PE7, B),
},
.porta = { // no PCINTs in atmega128
.name = 'A', .r_port = PORTA, .r_ddr = DDRA, .r_pin = PINA,
AVR_SELFPROG_DECLARE(SPMCSR, SPMEN, SPM_READY_vect),
AVR_WATCHDOG_DECLARE(WDTCSR, WDT_vect),
.extint = {
- AVR_EXTINT_DECLARE(0, 'D', PD0),
- AVR_EXTINT_DECLARE(1, 'D', PD1),
- AVR_EXTINT_DECLARE(2, 'D', PD2),
- AVR_EXTINT_DECLARE(3, 'D', PD3),
- AVR_EXTINT_DECLARE(4, 'E', PE4),
- AVR_EXTINT_DECLARE(5, 'E', PE5),
- AVR_EXTINT_DECLARE(6, 'E', PE6),
- AVR_EXTINT_DECLARE(7, 'E', PE7),
+ AVR_EXTINT_MEGA_DECLARE(0, 'D', PD0, A),
+ AVR_EXTINT_MEGA_DECLARE(1, 'D', PD1, A),
+ AVR_EXTINT_MEGA_DECLARE(2, 'D', PD2, A),
+ AVR_EXTINT_MEGA_DECLARE(3, 'D', PD3, A),
+ AVR_EXTINT_MEGA_DECLARE(4, 'E', PE4, B),
+ AVR_EXTINT_MEGA_DECLARE(5, 'E', PE5, B),
+ AVR_EXTINT_MEGA_DECLARE(6, 'E', PE6, B),
+ AVR_EXTINT_MEGA_DECLARE(7, 'E', PE7, B),
},
.porta = {
.name = 'A', .r_port = PORTA, .r_ddr = DDRA, .r_pin = PINA,
AVR_SELFPROG_DECLARE(SPMCSR, SPMEN, SPM_READY_vect),
AVR_WATCHDOG_DECLARE(WDTCSR, WDT_vect),
.extint = {
- AVR_EXTINT_DECLARE(0, 'D', PD0),
- AVR_EXTINT_DECLARE(1, 'D', PD1),
- AVR_EXTINT_DECLARE(2, 'D', PD2),
- AVR_EXTINT_DECLARE(3, 'D', PD3),
- AVR_EXTINT_DECLARE(4, 'E', PE4),
- AVR_EXTINT_DECLARE(5, 'E', PE5),
- AVR_EXTINT_DECLARE(6, 'E', PE6),
- AVR_EXTINT_DECLARE(7, 'E', PE7),
+ AVR_EXTINT_MEGA_DECLARE(0, 'D', PD0, A),
+ AVR_EXTINT_MEGA_DECLARE(1, 'D', PD1, A),
+ AVR_EXTINT_MEGA_DECLARE(2, 'D', PD2, A),
+ AVR_EXTINT_MEGA_DECLARE(3, 'D', PD3, A),
+ AVR_EXTINT_MEGA_DECLARE(4, 'E', PE4, B),
+ AVR_EXTINT_MEGA_DECLARE(5, 'E', PE5, B),
+ AVR_EXTINT_MEGA_DECLARE(6, 'E', PE6, B),
+ AVR_EXTINT_MEGA_DECLARE(7, 'E', PE7, B),
},
.porta = {
.name = 'A', .r_port = PORTA, .r_ddr = DDRA, .r_pin = PINA,
// Declares a typical INT into a avr_extint_t in a core.
// this is a shortcut since INT declarations are pretty standard.
-// The Tinies are slightly different. see sim_tinyx5.h
+// The Tinies as well as the atmega1280 are slightly different.
+// See sim_tinyx5.h and sim_mega1280.h
#define AVR_EXTINT_DECLARE(_index, _portname, _portpin) \
.eint[_index] = { \
.port_ioctl = AVR_IOCTL_IOPORT_GETIRQ(_portname), \
},\
}
+#define AVR_EXTINT_MEGA_DECLARE(_index, _portname, _portpin, _EICR) \
+ .eint[_index] = { \
+ .port_ioctl = AVR_IOCTL_IOPORT_GETIRQ(_portname), \
+ .port_pin = _portpin, \
+ .isc = { AVR_IO_REGBIT(EICR##_EICR, ISC##_index##0), AVR_IO_REGBIT(EICR##_EICR, ISC##_index##1) },\
+ .vector = { \
+ .enable = AVR_IO_REGBIT(EIMSK, INT##_index), \
+ .raised = AVR_IO_REGBIT(EIFR, INTF##_index), \
+ .vector = INT##_index##_vect, \
+ },\
+ }
+
#define AVR_EXTINT_TINY_DECLARE(_index, _portname, _portpin, _IFR) \
.eint[_index] = { \
.port_ioctl = AVR_IOCTL_IOPORT_GETIRQ(_portname), \