diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c')
-rw-r--r-- | c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c b/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c index 1e4a1277e2..e39825dfa5 100644 --- a/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c +++ b/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c @@ -205,6 +205,27 @@ static void PIO_SetInput( pio->PIO_IFSCER = mask; } + /* Configure additional interrupt mode registers */ + if (attribute & PIO_IT_AIME) { + // enable additional interrupt mode + pio->PIO_AIMER = mask; + + // if bit field of selected pin is 1, set as Rising Edge/High level detection event + if (attribute & PIO_IT_RE_OR_HL) + pio->PIO_REHLSR = mask; + else + pio->PIO_FELLSR = mask; + + /* if bit field of selected pin is 1, set as edge detection source */ + if (attribute & PIO_IT_EDGE) + pio->PIO_ESR = mask; + else + pio->PIO_LSR = mask; + } else { + /* disable additional interrupt mode */ + pio->PIO_AIMDR = mask; + } + /* Configure pin as input */ pio->PIO_ODR = mask; pio->PIO_PER = mask; |