aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino
diff options
context:
space:
mode:
authorKristian Lauszus <lauszus@gmail.com>2012-06-02 20:08:46 +0200
committerKristian Lauszus <lauszus@gmail.com>2012-06-02 20:08:46 +0200
commit4ed0bd2bd562ad815e62e0a2dbb34d854d2c6929 (patch)
treed81d82580c104978640f062ffa7abc4b5b2dd578 /cores/arduino
parent810803c6d3ab33a4496a89f41ef7e1dda15e8680 (diff)
Added support for interrupt on INT2 and INT3 on the Leonardo
Diffstat (limited to 'cores/arduino')
-rw-r--r--cores/arduino/WInterrupts.c36
-rwxr-xr-xcores/arduino/wiring_private.h2
2 files changed, 32 insertions, 6 deletions
diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c
index 8f3ec84..62efc9c 100644
--- a/cores/arduino/WInterrupts.c
+++ b/cores/arduino/WInterrupts.c
@@ -59,6 +59,14 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
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);
+ break;
+ case 3:
+ EICRA = (EICRA & ~((1<<ISC30) | (1<<ISC31))) | (mode << ISC30);
+ EIMSK |= (1<<INT3);
+ break;
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
case 2:
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
@@ -147,12 +155,18 @@ void detachInterrupt(uint8_t interruptNum) {
// ATmega8. There, INT0 is 6 and INT1 is 7.)
switch (interruptNum) {
#if defined(__AVR_ATmega32U4__)
- case 0:
- EIMSK &= ~(1<<INT0);
- break;
- case 1:
- EIMSK &= ~(1<<INT1);
- break;
+ case 0:
+ EIMSK &= ~(1<<INT0);
+ break;
+ case 1:
+ EIMSK &= ~(1<<INT1);
+ break;
+ case 2:
+ EIMSK &= ~(1<<INT2);
+ break;
+ case 3:
+ EIMSK &= ~(1<<INT3);
+ break;
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
case 2:
EIMSK &= ~(1 << INT0);
@@ -226,6 +240,16 @@ SIGNAL(INT1_vect) {
intFunc[EXTERNAL_INT_1]();
}
+SIGNAL(INT2_vect) {
+ if(intFunc[EXTERNAL_INT_2])
+ intFunc[EXTERNAL_INT_2]();
+}
+
+SIGNAL(INT3_vect) {
+ if(intFunc[EXTERNAL_INT_3])
+ intFunc[EXTERNAL_INT_3]();
+}
+
#elif defined(EICRA) && defined(EICRB)
SIGNAL(INT0_vect) {
diff --git a/cores/arduino/wiring_private.h b/cores/arduino/wiring_private.h
index f0ceb0c..026ce1a 100755
--- a/cores/arduino/wiring_private.h
+++ b/cores/arduino/wiring_private.h
@@ -56,6 +56,8 @@ extern "C"{
#define EXTERNAL_NUM_INTERRUPTS 8
#elif defined(__AVR_ATmega1284P__)
#define EXTERNAL_NUM_INTERRUPTS 3
+#elif defined(__AVR_ATmega32U4__)
+#define EXTERNAL_NUM_INTERRUPTS 4
#else
#define EXTERNAL_NUM_INTERRUPTS 2
#endif