[gnoduino: 223/237] Support 3rd external interrupt on ATmega1284P (maniacbug)
- From: Lucian Langa <lucilanga src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnoduino: 223/237] Support 3rd external interrupt on ATmega1284P (maniacbug)
- Date: Sat, 31 Mar 2012 20:33:35 +0000 (UTC)
commit 5cedb2b71828bc8d46038c05726e5678116da639
Author: David A. Mellis <d mellis arduino cc>
Date: Fri Dec 2 17:17:27 2011 -0500
Support 3rd external interrupt on ATmega1284P (maniacbug)
http://code.google.com/p/arduino/issues/detail?id=728
arduino/cores/arduino/WInterrupts.c | 22 ++++++++++++++++++++++
arduino/cores/arduino/wiring_private.h | 2 ++
2 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/arduino/cores/arduino/WInterrupts.c b/arduino/cores/arduino/WInterrupts.c
index 75c713b..1449cfb 100755
--- a/arduino/cores/arduino/WInterrupts.c
+++ b/arduino/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
/*
diff --git a/arduino/cores/arduino/wiring_private.h b/arduino/cores/arduino/wiring_private.h
index 41d1d40..f0ceb0c 100755
--- a/arduino/cores/arduino/wiring_private.h
+++ b/arduino/cores/arduino/wiring_private.h
@@ -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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]