diff options
author | Cristian Maglie <c.maglie@bug.st> | 2013-05-29 18:30:36 +0200 |
---|---|---|
committer | Cristian Maglie <c.maglie@bug.st> | 2013-05-29 18:30:36 +0200 |
commit | d90fcca5839d13d57ed527d4009b78d22dafbde7 (patch) | |
tree | 768b98af21e5075846184dd3de41ae0c22e75e20 /cores/arduino | |
parent | 7207108255a772474b322151cb0fd113e8030afe (diff) | |
parent | ef4e8c65373f531ce6d37ff226a21fc9b358ff29 (diff) |
Merged 1.0.5
Diffstat (limited to 'cores/arduino')
-rw-r--r-- | cores/arduino/WInterrupts.c | 30 | ||||
-rw-r--r-- | cores/arduino/wiring_private.h | 2 |
2 files changed, 22 insertions, 10 deletions
diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index de49cd1..d3fbf10 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -51,14 +51,14 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) { // I hate doing this, but the register assignment differs between the 1280/2560 // and the 32U4. Since avrlib defines registers PCMSK1 and PCMSK2 that aren't // even present on the 32U4 this is the only way to distinguish between them. - case 0: - EICRA = (EICRA & ~((1<<ISC00) | (1<<ISC01))) | (mode << ISC00); - EIMSK |= (1<<INT0); - break; - case 1: - EICRA = (EICRA & ~((1<<ISC10) | (1<<ISC11))) | (mode << ISC10); - EIMSK |= (1<<INT1); - break; + case 0: + EICRA = (EICRA & ~((1<<ISC00) | (1<<ISC01))) | (mode << ISC00); + EIMSK |= (1<<INT0); + break; + case 1: + EICRA = (EICRA & ~((1<<ISC10) | (1<<ISC11))) | (mode << ISC10); + EIMSK |= (1<<INT1); + break; case 2: EICRA = (EICRA & ~((1<<ISC20) | (1<<ISC21))) | (mode << ISC20); EIMSK |= (1<<INT2); @@ -67,6 +67,10 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) { EICRA = (EICRA & ~((1<<ISC30) | (1<<ISC31))) | (mode << ISC30); EIMSK |= (1<<INT3); break; + case 4: + EICRB = (EICRB & ~((1<<ISC60) | (1<<ISC61))) | (mode << ISC60); + EIMSK |= (1<<INT6); + break; #elif defined(EICRA) && defined(EICRB) && defined(EIMSK) case 2: EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00); @@ -166,7 +170,10 @@ void detachInterrupt(uint8_t interruptNum) { break; case 3: EIMSK &= ~(1<<INT3); - break; + break; + case 4: + EIMSK &= ~(1<<INT6); + break; #elif defined(EICRA) && defined(EICRB) && defined(EIMSK) case 2: EIMSK &= ~(1 << INT0); @@ -250,6 +257,11 @@ ISR(INT3_vect) { intFunc[EXTERNAL_INT_3](); } +ISR(INT6_vect) { + if(intFunc[EXTERNAL_INT_4]) + intFunc[EXTERNAL_INT_4](); +} + #elif defined(EICRA) && defined(EICRB) ISR(INT0_vect) { diff --git a/cores/arduino/wiring_private.h b/cores/arduino/wiring_private.h index 90dbf2c..c366005 100644 --- a/cores/arduino/wiring_private.h +++ b/cores/arduino/wiring_private.h @@ -57,7 +57,7 @@ extern "C"{ #elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) #define EXTERNAL_NUM_INTERRUPTS 3 #elif defined(__AVR_ATmega32U4__) -#define EXTERNAL_NUM_INTERRUPTS 4 +#define EXTERNAL_NUM_INTERRUPTS 5 #else #define EXTERNAL_NUM_INTERRUPTS 2 #endif |