Skip to content

Commit

Permalink
Support 3rd external interrupt on ATmega1284P (maniacbug)
Browse files Browse the repository at this point in the history
  • Loading branch information
damellis committed Dec 2, 2011
1 parent 0d70c72 commit d7d0e30
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
22 changes: 22 additions & 0 deletions hardware/arduino/cores/arduino/WInterrupts.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,21 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
#warning attachInterrupt may need some more work for this cpu (case 1)
#endif
break;

case 2:
#if defined(EICRA) && defined(ISC20) && defined(ISC21) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
EIMSK |= (1 << INT2);
#elif defined(MCUCR) && defined(ISC20) && defined(ISC21) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
GICR |= (1 << INT2);
#elif defined(MCUCR) && defined(ISC20) && defined(GIMSK) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
GIMSK |= (1 << INT2);
#else
#warning attachInterrupt may need some more work for this cpu (case 1)
#endif
break;
#endif
}
}
Expand Down Expand Up @@ -237,6 +252,13 @@ SIGNAL(INT1_vect) {
intFunc[EXTERNAL_INT_1]();
}

#if defined(EICRA) && defined(ISC20)
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
#endif

#endif

/*
Expand Down
2 changes: 2 additions & 0 deletions hardware/arduino/cores/arduino/wiring_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ extern "C"{

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define EXTERNAL_NUM_INTERRUPTS 8
#elif defined(__AVR_ATmega1284P__)
#define EXTERNAL_NUM_INTERRUPTS 3
#else
#define EXTERNAL_NUM_INTERRUPTS 2
#endif
Expand Down

0 comments on commit d7d0e30

Please sign in to comment.