aboutsummaryrefslogtreecommitdiff
path: root/cores
diff options
context:
space:
mode:
Diffstat (limited to 'cores')
-rw-r--r--cores/arduino/WInterrupts.c80
1 files changed, 21 insertions, 59 deletions
diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c
index 7e9f717..cef1106 100644
--- a/cores/arduino/WInterrupts.c
+++ b/cores/arduino/WInterrupts.c
@@ -280,75 +280,37 @@ void attachInterruptTwi(void (*userFunc)(void) ) {
}
*/
-#if defined(__AVR_ATmega32U4__)
-ISR(INT0_vect) {
- intFunc[EXTERNAL_INT_0]();
-}
-
-ISR(INT1_vect) {
- intFunc[EXTERNAL_INT_1]();
-}
-
-ISR(INT2_vect) {
- intFunc[EXTERNAL_INT_2]();
-}
+#define IMPLEMENT_ISR(vect, interrupt) \
+ ISR(vect) { \
+ intFunc[interrupt](); \
+ }
-ISR(INT3_vect) {
- intFunc[EXTERNAL_INT_3]();
-}
+#if defined(__AVR_ATmega32U4__)
-ISR(INT6_vect) {
- intFunc[EXTERNAL_INT_4]();
-}
+IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_0)
+IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_1)
+IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_2)
+IMPLEMENT_ISR(INT3_vect, EXTERNAL_INT_3)
+IMPLEMENT_ISR(INT6_vect, EXTERNAL_INT_4)
#elif defined(EICRA) && defined(EICRB)
-ISR(INT0_vect) {
- intFunc[EXTERNAL_INT_2]();
-}
-
-ISR(INT1_vect) {
- intFunc[EXTERNAL_INT_3]();
-}
-
-ISR(INT2_vect) {
- intFunc[EXTERNAL_INT_4]();
-}
-
-ISR(INT3_vect) {
- intFunc[EXTERNAL_INT_5]();
-}
-
-ISR(INT4_vect) {
- intFunc[EXTERNAL_INT_0]();
-}
-
-ISR(INT5_vect) {
- intFunc[EXTERNAL_INT_1]();
-}
-
-ISR(INT6_vect) {
- intFunc[EXTERNAL_INT_6]();
-}
-
-ISR(INT7_vect) {
- intFunc[EXTERNAL_INT_7]();
-}
+IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_2)
+IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_3)
+IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_4)
+IMPLEMENT_ISR(INT3_vect, EXTERNAL_INT_5)
+IMPLEMENT_ISR(INT4_vect, EXTERNAL_INT_0)
+IMPLEMENT_ISR(INT5_vect, EXTERNAL_INT_1)
+IMPLEMENT_ISR(INT6_vect, EXTERNAL_INT_6)
+IMPLEMENT_ISR(INT7_vect, EXTERNAL_INT_7)
#else
-ISR(INT0_vect) {
- intFunc[EXTERNAL_INT_0]();
-}
-
-ISR(INT1_vect) {
- intFunc[EXTERNAL_INT_1]();
-}
+IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_0)
+IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_1)
#if defined(EICRA) && defined(ISC20)
-ISR(INT2_vect) {
- intFunc[EXTERNAL_INT_2]();
-}
+IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_2)
#endif
#endif