aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/WInterrupts.c
diff options
context:
space:
mode:
authorDavid A. Mellis <d.mellis@arduino.cc>2011-12-02 17:17:27 -0500
committerDavid A. Mellis <d.mellis@arduino.cc>2011-12-02 17:17:27 -0500
commitc2263dfc0b7a30c3f85916ae4b093feb770aca15 (patch)
tree81c179af6cd43dc3d24d85a0a9039ac5e1a682fd /cores/arduino/WInterrupts.c
parentaae9972a2b3fa47b12a99d5c7fea7fd49f51ce4f (diff)
Support 3rd external interrupt on ATmega1284P (maniacbug)
http://code.google.com/p/arduino/issues/detail?id=728
Diffstat (limited to 'cores/arduino/WInterrupts.c')
-rwxr-xr-xcores/arduino/WInterrupts.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c
index 75c713b..1449cfb 100755
--- a/cores/arduino/WInterrupts.c
+++ b/cores/arduino/WInterrupts.c
@@ -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
}
}
@@ -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
/*