Skip to content

Commit

Permalink
Merge pull request arduino#4521 from paulo-raca/implement_isr
Browse files Browse the repository at this point in the history
Boilerplate reduction on ISR declaration
  • Loading branch information
facchinm committed Feb 12, 2016
2 parents c51ae1d + 0ab9245 commit cd9a6ec
Showing 1 changed file with 21 additions and 59 deletions.
80 changes: 21 additions & 59 deletions hardware/arduino/avr/cores/arduino/WInterrupts.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit cd9a6ec

Please sign in to comment.