29.6.3.3 Interrupt Pin Debouncing

The external interrupt pin (EIC_EXTINT) edge detection can use a debouncer to improve input noise immunity. When selected, the debouncer can work in the synchronous mode or the asynchronous mode, depending on the configuration of the ASYNCH.ASYNCH[x] bit for the pin. The debouncer uses the EIC clock as defined by the bit CTRLA.CKSEL to clock the debouncing circuitry. The debouncing time frame is set with the debouncer prescaler DPRESCALER.DPRESCALERn, which provides the low-frequency clock tick that is used to reject higher frequency signals.

The debouncing mode for the EIC_EXTINTx pin can be selected only if the Sense bits in the Configuration y register (CONFIGy.SENSEx) are set to RISE, FALL or BOTH. If the debouncing mode for pin EIC_EXTINTx is selected, the filter mode for that pin (CONFIGy.FILTENx) cannot be selected.

The debouncer manages an internal "valid pin state" that depends on the external interrupt (EIC_EXTINTx) pin transitions, the debouncing mode and the debouncer prescaler frequency. The valid pin state reflects the pin value after debouncing. The external interrupt pin(s) (EIC_EXTINTx) is sampled continuously on EIC clock. The sampled value is evaluated on each low frequency clock tick to detect a transitional edge when the sampled value is different of the current valid pin state. The sampled value is evaluated on each EIC clock when DPRESCALER.TICKON = 0 or on each low frequency clock tick when DPRESCALER.TICKON = 1, to detect a bounce when the sampled value is equal to the current valid pin state. Transitional edge detection increments the transition counter of the EIC_EXTINTx pins, while bounce detection resets the transition counter. The transition counter must exceed the transition count threshold as defined by the DPRESCALER.STATESn bitfield. In the synchronous mode the threshold is 4 when DPRESCALER.STATESn = 0 or 8 when DPRESCALER.STATESn = 1. In the asynchronous mode the threshold is 4.

The valid pin state for the pins can be accessed by reading the PINSTATE register for both synchronous or asynchronous debouncing mode.

Synchronous edge detection – In this mode the external interrupt (EIC_EXTINTx) pin is sampled continuously on EIC clock.

  1. A pin edge transition will be validated when the sampled value is consistently different of the current valid pin state for 4 (or 8 depending on bit DPRESCALER.STATESn) consecutive ticks of the low-frequency clock.
  2. Any pin sample, at the low-frequency clock tick rate, with a value opposite to the current valid pin state will increment the transition counter.
  3. Any pin sample, at EIC clock rate (when DPRESCALER.TICKON = 0) or the low-frequency clock tick (when DPRESCALER.TICKON = 1), with a value identical to the current valid pin state will return the transition counter to zero.
  4. When the transition counter meets the count threshold, the pin edge transition is validated and the pin state PINSTATE.PINSTATE[x] is changed to the detected level.
  5. The external interrupt flag (INTFLAG.EXTINT[x]) is set when the pin state PINSTATE.PINSTATE[x] is changed.
Figure 29-3. EIC_EXTINTx Pin Synchronous Debouncing (Rising Edge)

In the synchronous edge detection mode, the EIC clock is required. The synchronous edge detection mode can be used in Idle and Standby Sleep modes.

Asynchronous edge detection – In this mode, the external interrupt (EIC_EXTINTx) pins directly drives an asynchronous edges detector which triggers any rising or falling edge on the pin:

  1. Any edge detected that indicates a transition from the current valid pin state will immediately set the valid pin state PINSTATE.PINSTATE[x] to the detected level.
  2. The external interrupt flag (INTFLAG.EXTINT[x] is immediately changed.
  3. The edge detector will then be idle until no other rising or falling edge transition is detected during 4 consecutive ticks of the low frequency clock.
  4. Any rising or falling edge transition detected during the idle state will return the transition counter to 0.
  5. After 4 consecutive ticks of the low frequency clock without bounce detected, the edge detector is ready for a new detection.
Figure 29-4. EIC_EXTINTx Pin(s) Asynchronous Debouncing (Rising Edge)

In this mode, the EIC clock is requested. The asynchronous edge detection mode can be used in Idle and Standby sleep modes.