Skip to content

Commit dab4d8d

Browse files
committed
Added support for interrupt on INT2 and INT3 on the Leonardo
1 parent 0ebfbf8 commit dab4d8d

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

hardware/arduino/cores/arduino/WInterrupts.c

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
5959
EICRA = (EICRA & ~((1<<ISC10) | (1<<ISC11))) | (mode << ISC10);
6060
EIMSK |= (1<<INT1);
6161
break;
62+
case 2:
63+
EICRA = (EICRA & ~((1<<ISC20) | (1<<ISC21))) | (mode << ISC20);
64+
EIMSK |= (1<<INT2);
65+
break;
66+
case 3:
67+
EICRA = (EICRA & ~((1<<ISC30) | (1<<ISC31))) | (mode << ISC30);
68+
EIMSK |= (1<<INT3);
69+
break;
6270
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
6371
case 2:
6472
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
@@ -147,12 +155,18 @@ void detachInterrupt(uint8_t interruptNum) {
147155
// ATmega8. There, INT0 is 6 and INT1 is 7.)
148156
switch (interruptNum) {
149157
#if defined(__AVR_ATmega32U4__)
150-
case 0:
151-
EIMSK &= ~(1<<INT0);
152-
break;
153-
case 1:
154-
EIMSK &= ~(1<<INT1);
155-
break;
158+
case 0:
159+
EIMSK &= ~(1<<INT0);
160+
break;
161+
case 1:
162+
EIMSK &= ~(1<<INT1);
163+
break;
164+
case 2:
165+
EIMSK &= ~(1<<INT2);
166+
break;
167+
case 3:
168+
EIMSK &= ~(1<<INT3);
169+
break;
156170
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
157171
case 2:
158172
EIMSK &= ~(1 << INT0);
@@ -226,6 +240,16 @@ SIGNAL(INT1_vect) {
226240
intFunc[EXTERNAL_INT_1]();
227241
}
228242

243+
SIGNAL(INT2_vect) {
244+
if(intFunc[EXTERNAL_INT_2])
245+
intFunc[EXTERNAL_INT_2]();
246+
}
247+
248+
SIGNAL(INT3_vect) {
249+
if(intFunc[EXTERNAL_INT_3])
250+
intFunc[EXTERNAL_INT_3]();
251+
}
252+
229253
#elif defined(EICRA) && defined(EICRB)
230254

231255
SIGNAL(INT0_vect) {

hardware/arduino/cores/arduino/wiring_private.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ extern "C"{
5656
#define EXTERNAL_NUM_INTERRUPTS 8
5757
#elif defined(__AVR_ATmega1284P__)
5858
#define EXTERNAL_NUM_INTERRUPTS 3
59+
#elif defined(__AVR_ATmega32U4__)
60+
#define EXTERNAL_NUM_INTERRUPTS 4
5961
#else
6062
#define EXTERNAL_NUM_INTERRUPTS 2
6163
#endif

0 commit comments

Comments
 (0)