Commit ead39534384a577ba325c9a95cb58691f15c4f6f
authorJakob Gruber <jakob.gruber@gmail.com>
Fri, 31 Aug 2012 08:41:03 +0000 (10:41 +0200)
committerJakob Gruber <jakob.gruber@gmail.com>
Fri, 31 Aug 2012 09:16:32 +0000 (11:16 +0200)
The atmega1280/atmega1281/atmega128/90usb162
have two external interrupt control registers;
EICRA for ISC[0-3]x, and EICRB for ISC[4-7]x.

5 files changed:
simavr/cores/sim_90usb162.c
simavr/cores/sim_mega128.c
simavr/cores/sim_mega1280.c
simavr/cores/sim_mega1281.c
simavr/sim/avr_extint.h

index 974e2809b543d6bf4fe63ca9c4f4db8b0f763ed3..9d70076be48595fe30a7a23651bc32e8d57570fe 100644 (file)
@@ -63,14 +63,14 @@ const struct mcu_t {
        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,
index 8d725d38cd155890e813f16b75cbcb168cafb3df..a182255f146e1a6a44d5f1fbed8522c681b71f06 100644 (file)
@@ -69,14 +69,14 @@ const struct mcu_t {
        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,
index 4765cfd4c0dfe84731f3d3cf913837d6415c23ae..d2f7cc67aca6d4e6b65931d59c44c2bc00f226ae 100644 (file)
@@ -73,14 +73,14 @@ const struct mcu_t {
        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,
index bf81eb2c1b5287c88ea42fff199fafd6c992e251..bf42988c63de46a9c659fda53bb224b961057c04 100644 (file)
@@ -69,14 +69,14 @@ const struct mcu_t {
        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,
index be54c307d9c558b8f54f773003b678eba9bcfbb4..8beb356e191efdefc9b469de5243472b6dd61e7d 100644 (file)
@@ -65,7 +65,8 @@ void avr_extint_init(avr_t * avr, avr_extint_t * p);
 
 // 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), \
@@ -78,6 +79,18 @@ void avr_extint_init(avr_t * avr, avr_extint_t * p);
                        },\
                }
 
+#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), \