summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio.c
diff options
context:
space:
mode:
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.c21
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;