The SAMD21 family of microcontrollers features the EIC (External Interrupt Controller) module which you can use to have up to 16 external interrupts on rising, falling or both edges.
External interrupts are only possible on the EXTINT0
to EXTINT15
pins (each of the EXTINTs is called an external interrupt line, e.g. EXTINT0
is called external interrupt line 0).
Every PA and every PB pin is assigned to one of the external interrupt lines! However, if you use multiple external interrupts on the same external interrupt line, you need to do extra work in the firmware to distinguish which specific pin the interrupt came from.
Therefore, I recommend that you use each external interrupt line (EXTINT0
to EXTINT15
) only once, if possible.
Here is our table that shows which pin is connected to which interrupt line:
SAMD21 external interrupts
Pin | External interrupt |
---|---|
PA00 | EXTINT0 |
PA01 | EXTINT1 |
PA02 | EXTINT2 |
PA03 | EXTINT3 |
PA04 | EXTINT4 |
PA05 | EXTINT5 |
PA06 | EXTINT6 |
PA07 | EXTINT7 |
PA08 | NMI* |
PA09 | EXTINT9 |
PA10 | EXTINT10 |
PA11 | EXTINT11 |
PA12 | EXTINT12 |
PA13 | EXTINT13 |
PA14 | EXTINT14 |
PA15 | EXTINT15 |
PA16 | EXTINT0 |
PA17 | EXTINT1 |
PA18 | EXTINT2 |
PA19 | EXTINT3 |
PA20 | EXTINT4 |
PA21 | EXTINT5 |
PA22 | EXTINT6 |
PA23 | EXTINT7 |
PA24 | EXTINT12 |
PA25 | EXTINT13 |
PA27 | EXTINT15 |
PA28 | EXTINT8 |
PA30 | EXTINT10 |
PA31 | EXTINT11 |
PB00 | EXTINT0 |
PB01 | EXTINT1 |
PB02 | EXTINT2 |
PB03 | EXTINT3 |
PB04 | EXTINT4 |
PB05 | EXTINT5 |
PB06 | EXTINT6 |
PB07 | EXTINT7 |
PB08 | EXTINT8 |
PB09 | EXTINT9 |
PB10 | EXTINT10 |
PB11 | EXTINT11 |
PB12 | EXTINT12 |
PB13 | EXTINT13 |
PB14 | EXTINT14 |
PB15 | EXTINT15 |
PB16 | EXTINT0 |
PB17 | EXTINT1 |
PB21 | EXTINT5 |
PB22 | EXTINT6 |
PB23 | EXTINT7 |
PB27 | EXTINT15 |
PB28 | EXTINT8 |
PB30 | EXTINT10 |
PB31 | EXTINT11 |
*The NMI (non-maskable interrupt) is somewhat special and is not covered in this article. I recommend not to use it for general purpose external interrupts.