diff --git a/boards/arduino-due/include/periph_conf.h b/boards/arduino-due/include/periph_conf.h
index 2380b6e87b2aa78f62b6bb5ba45d67c030530e13..bf80529e77803fc15a7da0d5b8b00243390b3b90 100644
--- a/boards/arduino-due/include/periph_conf.h
+++ b/boards/arduino-due/include/periph_conf.h
@@ -145,7 +145,7 @@ extern "C" {
  * @name GPIO configuration
  * @{
  */
-#define GPIO_NUMOF          (16U)
+#define GPIO_NUMOF          (32U)
 #define GPIO_0_EN           1
 #define GPIO_1_EN           1
 #define GPIO_2_EN           1
@@ -162,6 +162,22 @@ extern "C" {
 #define GPIO_13_EN          1
 #define GPIO_14_EN          1
 #define GPIO_15_EN          1
+#define GPIO_16_EN          1
+#define GPIO_17_EN          1
+#define GPIO_18_EN          1
+#define GPIO_19_EN          1
+#define GPIO_20_EN          1
+#define GPIO_21_EN          1
+#define GPIO_22_EN          1
+#define GPIO_23_EN          1
+#define GPIO_24_EN          1
+#define GPIO_25_EN          1
+#define GPIO_26_EN          1
+#define GPIO_27_EN          1
+#define GPIO_28_EN          1
+#define GPIO_29_EN          1
+#define GPIO_30_EN          1
+#define GPIO_31_EN          1
 #define GPIO_IRQ_PRIO       1
 
 /* GPIO channel 0 config */
@@ -244,6 +260,86 @@ extern "C" {
 #define GPIO_15_PIN         PIO_PB14
 #define GPIO_15_IRQ         PIOB_IRQn
 #define GPIO_B14_MAP        15
+/* GPIO channel 16 config */
+#define GPIO_16_DEV         PIOB
+#define GPIO_16_PIN         PIO_PB26
+#define GPIO_16_IRQ         PIOB_IRQn
+#define GPIO_B26_MAP        16
+/* GPIO channel 17 config */
+#define GPIO_17_DEV         PIOA
+#define GPIO_17_PIN         PIO_PA15
+#define GPIO_17_IRQ         PIOA_IRQn
+#define GPIO_A15_MAP        17
+/* GPIO channel 18 config */
+#define GPIO_18_DEV         PIOD
+#define GPIO_18_PIN         PIO_PD1
+#define GPIO_18_IRQ         PIOD_IRQn
+#define GPIO_D1_MAP         18
+/* GPIO channel 19 config */
+#define GPIO_19_DEV         PIOD
+#define GPIO_19_PIN         PIO_PD3
+#define GPIO_19_IRQ         PIOD_IRQn
+#define GPIO_D3_MAP         19
+/* GPIO channel 20 config */
+#define GPIO_20_DEV         PIOD
+#define GPIO_20_PIN         PIO_PD9
+#define GPIO_20_IRQ         PIOD_IRQn
+#define GPIO_D9_MAP         20
+/* GPIO channel 21 config */
+#define GPIO_21_DEV         PIOD
+#define GPIO_21_PIN         PIO_PD10
+#define GPIO_21_IRQ         PIOD_IRQn
+#define GPIO_D10_MAP        21
+/* GPIO channel 22 config */
+#define GPIO_22_DEV         PIOC
+#define GPIO_22_PIN         PIO_PC2
+#define GPIO_22_IRQ         PIOC_IRQn
+#define GPIO_C2_MAP         22
+/* GPIO channel 23 config */
+#define GPIO_23_DEV         PIOC
+#define GPIO_23_PIN         PIO_PC4
+#define GPIO_23_IRQ         PIOC_IRQn
+#define GPIO_C4_MAP         23
+/* GPIO channel 24 config */
+#define GPIO_24_DEV         PIOC
+#define GPIO_24_PIN         PIO_PC6
+#define GPIO_24_IRQ         PIOC_IRQn
+#define GPIO_C6_MAP         24
+/* GPIO channel 25 config */
+#define GPIO_25_DEV         PIOC
+#define GPIO_25_PIN         PIO_PC8
+#define GPIO_25_IRQ         PIOC_IRQn
+#define GPIO_C8_MAP         25
+/* GPIO channel 26 config */
+#define GPIO_26_DEV         PIOA
+#define GPIO_26_PIN         PIO_PA19
+#define GPIO_26_IRQ         PIOA_IRQn
+#define GPIO_A19_MAP        26
+/* GPIO channel 27 config */
+#define GPIO_27_DEV         PIOC
+#define GPIO_27_PIN         PIO_PC19
+#define GPIO_27_IRQ         PIOC_IRQn
+#define GPIO_C19_MAP        27
+/* GPIO channel 28 config */
+#define GPIO_28_DEV         PIOC
+#define GPIO_28_PIN         PIO_PC17
+#define GPIO_28_IRQ         PIOC_IRQn
+#define GPIO_C17_MAP        28
+/* GPIO channel 29 config */
+#define GPIO_29_DEV         PIOC
+#define GPIO_29_PIN         PIO_PC15
+#define GPIO_29_IRQ         PIOC_IRQn
+#define GPIO_C15_MAP        29
+/* GPIO channel 30 config */
+#define GPIO_30_DEV         PIOC
+#define GPIO_30_PIN         PIO_PC13
+#define GPIO_30_IRQ         PIOC_IRQn
+#define GPIO_C13_MAP        30
+/* GPIO channel 31 config */
+#define GPIO_31_DEV         PIOB
+#define GPIO_31_PIN         PIO_PB21
+#define GPIO_31_IRQ         PIOB_IRQn
+#define GPIO_B21_MAP        31
 /** @} */
 
 #ifdef __cplusplus
diff --git a/boards/udoo/include/periph_conf.h b/boards/udoo/include/periph_conf.h
index fcaf8dc0c779f13e73c42c47a8f23c9bdcdb0756..5c49bf3adc887cadc00ac41316e2475a6d32862c 100644
--- a/boards/udoo/include/periph_conf.h
+++ b/boards/udoo/include/periph_conf.h
@@ -146,7 +146,7 @@ extern "C" {
  * @name GPIO configuration
  * @{
  */
-#define GPIO_NUMOF          (16U)
+#define GPIO_NUMOF          (32U)
 #define GPIO_0_EN           1
 #define GPIO_1_EN           1
 #define GPIO_2_EN           1
@@ -163,6 +163,22 @@ extern "C" {
 #define GPIO_13_EN          1
 #define GPIO_14_EN          1
 #define GPIO_15_EN          1
+#define GPIO_16_EN          1
+#define GPIO_17_EN          1
+#define GPIO_18_EN          1
+#define GPIO_19_EN          1
+#define GPIO_20_EN          1
+#define GPIO_21_EN          1
+#define GPIO_22_EN          1
+#define GPIO_23_EN          1
+#define GPIO_24_EN          1
+#define GPIO_25_EN          1
+#define GPIO_26_EN          1
+#define GPIO_27_EN          1
+#define GPIO_28_EN          1
+#define GPIO_29_EN          1
+#define GPIO_30_EN          1
+#define GPIO_31_EN          1
 #define GPIO_IRQ_PRIO       1
 
 /* GPIO channel 0 config */
@@ -245,6 +261,86 @@ extern "C" {
 #define GPIO_15_PIN         PIO_PB14
 #define GPIO_15_IRQ         PIOB_IRQn
 #define GPIO_B14_MAP        15
+/* GPIO channel 16 config */
+#define GPIO_16_DEV         PIOB
+#define GPIO_16_PIN         PIO_PB26
+#define GPIO_16_IRQ         PIOB_IRQn
+#define GPIO_B26_MAP        16
+/* GPIO channel 17 config */
+#define GPIO_17_DEV         PIOA
+#define GPIO_17_PIN         PIO_PA15
+#define GPIO_17_IRQ         PIOA_IRQn
+#define GPIO_A15_MAP        17
+/* GPIO channel 18 config */
+#define GPIO_18_DEV         PIOD
+#define GPIO_18_PIN         PIO_PD1
+#define GPIO_18_IRQ         PIOD_IRQn
+#define GPIO_D1_MAP         18
+/* GPIO channel 19 config */
+#define GPIO_19_DEV         PIOD
+#define GPIO_19_PIN         PIO_PD3
+#define GPIO_19_IRQ         PIOD_IRQn
+#define GPIO_D3_MAP         19
+/* GPIO channel 20 config */
+#define GPIO_20_DEV         PIOD
+#define GPIO_20_PIN         PIO_PD9
+#define GPIO_20_IRQ         PIOD_IRQn
+#define GPIO_D9_MAP         20
+/* GPIO channel 21 config */
+#define GPIO_21_DEV         PIOD
+#define GPIO_21_PIN         PIO_PD10
+#define GPIO_21_IRQ         PIOD_IRQn
+#define GPIO_D10_MAP        21
+/* GPIO channel 22 config */
+#define GPIO_22_DEV         PIOC
+#define GPIO_22_PIN         PIO_PC2
+#define GPIO_22_IRQ         PIOC_IRQn
+#define GPIO_C2_MAP         22
+/* GPIO channel 23 config */
+#define GPIO_23_DEV         PIOC
+#define GPIO_23_PIN         PIO_PC4
+#define GPIO_23_IRQ         PIOC_IRQn
+#define GPIO_C4_MAP         23
+/* GPIO channel 24 config */
+#define GPIO_24_DEV         PIOC
+#define GPIO_24_PIN         PIO_PC6
+#define GPIO_24_IRQ         PIOC_IRQn
+#define GPIO_C6_MAP         24
+/* GPIO channel 25 config */
+#define GPIO_25_DEV         PIOC
+#define GPIO_25_PIN         PIO_PC8
+#define GPIO_25_IRQ         PIOC_IRQn
+#define GPIO_C8_MAP         25
+/* GPIO channel 26 config */
+#define GPIO_26_DEV         PIOA
+#define GPIO_26_PIN         PIO_PA19
+#define GPIO_26_IRQ         PIOA_IRQn
+#define GPIO_A19_MAP        26
+/* GPIO channel 27 config */
+#define GPIO_27_DEV         PIOC
+#define GPIO_27_PIN         PIO_PC19
+#define GPIO_27_IRQ         PIOC_IRQn
+#define GPIO_C19_MAP        27
+/* GPIO channel 28 config */
+#define GPIO_28_DEV         PIOC
+#define GPIO_28_PIN         PIO_PC17
+#define GPIO_28_IRQ         PIOC_IRQn
+#define GPIO_C17_MAP        28
+/* GPIO channel 29 config */
+#define GPIO_29_DEV         PIOC
+#define GPIO_29_PIN         PIO_PC15
+#define GPIO_29_IRQ         PIOC_IRQn
+#define GPIO_C15_MAP        29
+/* GPIO channel 30 config */
+#define GPIO_30_DEV         PIOC
+#define GPIO_30_PIN         PIO_PC13
+#define GPIO_30_IRQ         PIOC_IRQn
+#define GPIO_C13_MAP        30
+/* GPIO channel 31 config */
+#define GPIO_31_DEV         PIOB
+#define GPIO_31_PIN         PIO_PB21
+#define GPIO_31_IRQ         PIOB_IRQn
+#define GPIO_B21_MAP        31
 /** @} */
 
 #ifdef __cplusplus
diff --git a/cpu/sam3x8e/periph/gpio.c b/cpu/sam3x8e/periph/gpio.c
index 038e7008ffb717251c2fae9f40f540909d733c20..f2239f92beed6cbba7a72dcf51961e42e35cdddd 100644
--- a/cpu/sam3x8e/periph/gpio.c
+++ b/cpu/sam3x8e/periph/gpio.c
@@ -138,6 +138,102 @@ int gpio_init_out(gpio_t dev, gpio_pp_t pushpull)
             port = GPIO_15_DEV;
             pin = GPIO_15_PIN;
             break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            port = GPIO_16_DEV;
+            pin = GPIO_16_PIN;
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            port = GPIO_17_DEV;
+            pin = GPIO_17_PIN;
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            port = GPIO_18_DEV;
+            pin = GPIO_18_PIN;
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            port = GPIO_19_DEV;
+            pin = GPIO_19_PIN;
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            port = GPIO_20_DEV;
+            pin = GPIO_20_PIN;
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            port = GPIO_21_DEV;
+            pin = GPIO_21_PIN;
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            port = GPIO_22_DEV;
+            pin = GPIO_22_PIN;
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            port = GPIO_23_DEV;
+            pin = GPIO_23_PIN;
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            port = GPIO_24_DEV;
+            pin = GPIO_24_PIN;
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            port = GPIO_25_DEV;
+            pin = GPIO_25_PIN;
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            port = GPIO_26_DEV;
+            pin = GPIO_26_PIN;
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            port = GPIO_27_DEV;
+            pin = GPIO_27_PIN;
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            port = GPIO_28_DEV;
+            pin = GPIO_28_PIN;
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            port = GPIO_29_DEV;
+            pin = GPIO_29_PIN;
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            port = GPIO_30_DEV;
+            pin = GPIO_30_PIN;
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            port = GPIO_31_DEV;
+            pin = GPIO_31_PIN;
+            break;
 #endif
     }
 
@@ -278,6 +374,118 @@ int gpio_init_in(gpio_t dev, gpio_pp_t pushpull)
             pin = GPIO_15_PIN;
             PMC->PMC_PCER0 = (1 << GPIO_15_IRQ);
             break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            port = GPIO_16_DEV;
+            pin = GPIO_16_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_16_IRQ);
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            port = GPIO_17_DEV;
+            pin = GPIO_17_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_17_IRQ);
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            port = GPIO_18_DEV;
+            pin = GPIO_18_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_18_IRQ);
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            port = GPIO_19_DEV;
+            pin = GPIO_19_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_19_IRQ);
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            port = GPIO_20_DEV;
+            pin = GPIO_20_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_20_IRQ);
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            port = GPIO_21_DEV;
+            pin = GPIO_21_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_21_IRQ);
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            port = GPIO_22_DEV;
+            pin = GPIO_22_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_22_IRQ);
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            port = GPIO_23_DEV;
+            pin = GPIO_23_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_23_IRQ);
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            port = GPIO_24_DEV;
+            pin = GPIO_24_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_24_IRQ);
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            port = GPIO_25_DEV;
+            pin = GPIO_25_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_25_IRQ);
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            port = GPIO_26_DEV;
+            pin = GPIO_26_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_26_IRQ);
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            port = GPIO_27_DEV;
+            pin = GPIO_27_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_27_IRQ);
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            port = GPIO_28_DEV;
+            pin = GPIO_28_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_28_IRQ);
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            port = GPIO_29_DEV;
+            pin = GPIO_29_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_29_IRQ);
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            port = GPIO_30_DEV;
+            pin = GPIO_30_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_30_IRQ);
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            port = GPIO_31_DEV;
+            pin = GPIO_31_PIN;
+            PMC->PMC_PCER0 = (1 << GPIO_31_IRQ);
+            break;
 #endif
     }
 
@@ -442,6 +650,134 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb
             NVIC_SetPriority(GPIO_15_IRQ, GPIO_IRQ_PRIO);
             NVIC_EnableIRQ(GPIO_15_IRQ);
             break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            port = GPIO_16_DEV;
+            pin = GPIO_16_PIN;
+            NVIC_SetPriority(GPIO_16_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_16_IRQ);
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            port = GPIO_17_DEV;
+            pin = GPIO_17_PIN;
+            NVIC_SetPriority(GPIO_17_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_17_IRQ);
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            port = GPIO_18_DEV;
+            pin = GPIO_18_PIN;
+            NVIC_SetPriority(GPIO_18_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_18_IRQ);
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            port = GPIO_19_DEV;
+            pin = GPIO_19_PIN;
+            NVIC_SetPriority(GPIO_19_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_19_IRQ);
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            port = GPIO_20_DEV;
+            pin = GPIO_20_PIN;
+            NVIC_SetPriority(GPIO_20_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_20_IRQ);
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            port = GPIO_21_DEV;
+            pin = GPIO_21_PIN;
+            NVIC_SetPriority(GPIO_21_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_21_IRQ);
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            port = GPIO_22_DEV;
+            pin = GPIO_22_PIN;
+            NVIC_SetPriority(GPIO_22_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_22_IRQ);
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            port = GPIO_23_DEV;
+            pin = GPIO_23_PIN;
+            NVIC_SetPriority(GPIO_23_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_23_IRQ);
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            port = GPIO_24_DEV;
+            pin = GPIO_24_PIN;
+            NVIC_SetPriority(GPIO_24_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_24_IRQ);
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            port = GPIO_25_DEV;
+            pin = GPIO_25_PIN;
+            NVIC_SetPriority(GPIO_25_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_25_IRQ);
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            port = GPIO_26_DEV;
+            pin = GPIO_26_PIN;
+            NVIC_SetPriority(GPIO_26_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_26_IRQ);
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            port = GPIO_27_DEV;
+            pin = GPIO_27_PIN;
+            NVIC_SetPriority(GPIO_27_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_27_IRQ);
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            port = GPIO_28_DEV;
+            pin = GPIO_28_PIN;
+            NVIC_SetPriority(GPIO_28_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_28_IRQ);
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            port = GPIO_29_DEV;
+            pin = GPIO_29_PIN;
+            NVIC_SetPriority(GPIO_29_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_29_IRQ);
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            port = GPIO_30_DEV;
+            pin = GPIO_30_PIN;
+            NVIC_SetPriority(GPIO_30_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_30_IRQ);
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            port = GPIO_31_DEV;
+            pin = GPIO_31_PIN;
+            NVIC_SetPriority(GPIO_31_IRQ, GPIO_IRQ_PRIO);
+            NVIC_EnableIRQ(GPIO_31_IRQ);
+            break;
 #endif
     }
 
@@ -577,6 +913,102 @@ int gpio_read(gpio_t dev)
             port = GPIO_15_DEV;
             pin = GPIO_15_PIN;
             break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            port = GPIO_16_DEV;
+            pin = GPIO_16_PIN;
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            port = GPIO_17_DEV;
+            pin = GPIO_17_PIN;
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            port = GPIO_18_DEV;
+            pin = GPIO_18_PIN;
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            port = GPIO_19_DEV;
+            pin = GPIO_19_PIN;
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            port = GPIO_20_DEV;
+            pin = GPIO_20_PIN;
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            port = GPIO_21_DEV;
+            pin = GPIO_21_PIN;
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            port = GPIO_22_DEV;
+            pin = GPIO_22_PIN;
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            port = GPIO_23_DEV;
+            pin = GPIO_23_PIN;
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            port = GPIO_24_DEV;
+            pin = GPIO_24_PIN;
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            port = GPIO_25_DEV;
+            pin = GPIO_25_PIN;
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            port = GPIO_26_DEV;
+            pin = GPIO_26_PIN;
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            port = GPIO_27_DEV;
+            pin = GPIO_27_PIN;
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            port = GPIO_28_DEV;
+            pin = GPIO_28_PIN;
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            port = GPIO_29_DEV;
+            pin = GPIO_29_PIN;
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            port = GPIO_30_DEV;
+            pin = GPIO_30_PIN;
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            port = GPIO_31_DEV;
+            pin = GPIO_31_PIN;
+            break;
 #endif
     }
 
@@ -677,6 +1109,86 @@ void gpio_set(gpio_t dev)
         case GPIO_15:
             GPIO_15_DEV->PIO_SODR = GPIO_15_PIN;
             break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            GPIO_16_DEV->PIO_SODR = GPIO_16_PIN;
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            GPIO_17_DEV->PIO_SODR = GPIO_17_PIN;
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            GPIO_18_DEV->PIO_SODR = GPIO_18_PIN;
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            GPIO_19_DEV->PIO_SODR = GPIO_19_PIN;
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            GPIO_20_DEV->PIO_SODR = GPIO_20_PIN;
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            GPIO_21_DEV->PIO_SODR = GPIO_21_PIN;
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            GPIO_22_DEV->PIO_SODR = GPIO_22_PIN;
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            GPIO_23_DEV->PIO_SODR = GPIO_23_PIN;
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            GPIO_24_DEV->PIO_SODR = GPIO_24_PIN;
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            GPIO_25_DEV->PIO_SODR = GPIO_25_PIN;
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            GPIO_26_DEV->PIO_SODR = GPIO_26_PIN;
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            GPIO_27_DEV->PIO_SODR = GPIO_27_PIN;
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            GPIO_28_DEV->PIO_SODR = GPIO_28_PIN;
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            GPIO_29_DEV->PIO_SODR = GPIO_29_PIN;
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            GPIO_30_DEV->PIO_SODR = GPIO_30_PIN;
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            GPIO_31_DEV->PIO_SODR = GPIO_31_PIN;
+            break;
 #endif
     }
 }
@@ -763,6 +1275,86 @@ void gpio_clear(gpio_t dev)
         case GPIO_15:
             GPIO_15_DEV->PIO_CODR = GPIO_15_PIN;
             break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            GPIO_16_DEV->PIO_CODR = GPIO_16_PIN;
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            GPIO_17_DEV->PIO_CODR = GPIO_17_PIN;
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            GPIO_18_DEV->PIO_CODR = GPIO_18_PIN;
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            GPIO_19_DEV->PIO_CODR = GPIO_19_PIN;
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            GPIO_20_DEV->PIO_CODR = GPIO_20_PIN;
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            GPIO_21_DEV->PIO_CODR = GPIO_21_PIN;
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            GPIO_22_DEV->PIO_CODR = GPIO_22_PIN;
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            GPIO_23_DEV->PIO_CODR = GPIO_23_PIN;
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            GPIO_24_DEV->PIO_CODR = GPIO_24_PIN;
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            GPIO_25_DEV->PIO_CODR = GPIO_25_PIN;
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            GPIO_26_DEV->PIO_CODR = GPIO_26_PIN;
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            GPIO_27_DEV->PIO_CODR = GPIO_27_PIN;
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            GPIO_28_DEV->PIO_CODR = GPIO_28_PIN;
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            GPIO_29_DEV->PIO_CODR = GPIO_29_PIN;
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            GPIO_30_DEV->PIO_CODR = GPIO_30_PIN;
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            GPIO_31_DEV->PIO_CODR = GPIO_31_PIN;
+            break;
 #endif
     }
 }
@@ -785,6 +1377,338 @@ void gpio_write(gpio_t dev, int value)
     }
 }
 
+
+void gpio_irq_disable(gpio_t dev)
+{
+    switch (dev) {
+#if GPIO_0_EN
+        case GPIO_0:
+            NVIC_DisableIRQ(GPIO_0_IRQ);
+            break;
+#endif
+#if GPIO_1_EN
+        case GPIO_1:
+            NVIC_DisableIRQ(GPIO_1_IRQ);
+            break;
+#endif
+#if GPIO_2_EN
+        case GPIO_2:
+            NVIC_DisableIRQ(GPIO_2_IRQ);
+            break;
+#endif
+#if GPIO_3_EN
+        case GPIO_3:
+            NVIC_DisableIRQ(GPIO_3_IRQ);
+            break;
+#endif
+#if GPIO_4_EN
+        case GPIO_4:
+            NVIC_DisableIRQ(GPIO_4_IRQ);
+            break;
+#endif
+#if GPIO_5_EN
+        case GPIO_5:
+            NVIC_DisableIRQ(GPIO_5_IRQ);
+            break;
+#endif
+#if GPIO_6_EN
+        case GPIO_6:
+            NVIC_DisableIRQ(GPIO_6_IRQ);
+            break;
+#endif
+#if GPIO_7_EN
+        case GPIO_7:
+            NVIC_DisableIRQ(GPIO_7_IRQ);
+            break;
+#endif
+#if GPIO_8_EN
+        case GPIO_8:
+            NVIC_DisableIRQ(GPIO_8_IRQ);
+            break;
+#endif
+#if GPIO_9_EN
+        case GPIO_9:
+            NVIC_DisableIRQ(GPIO_9_IRQ);
+            break;
+#endif
+#if GPIO_10_EN
+        case GPIO_10:
+            NVIC_DisableIRQ(GPIO_10_IRQ);
+            break;
+#endif
+#if GPIO_11_EN
+        case GPIO_11:
+            NVIC_DisableIRQ(GPIO_11_IRQ);
+            break;
+#endif
+#if GPIO_12_EN
+        case GPIO_12:
+            NVIC_DisableIRQ(GPIO_12_IRQ);
+            break;
+#endif
+#if GPIO_13_EN
+        case GPIO_13:
+            NVIC_DisableIRQ(GPIO_13_IRQ);
+            break;
+#endif
+#if GPIO_14_EN
+        case GPIO_14:
+            NVIC_DisableIRQ(GPIO_14_IRQ);
+            break;
+#endif
+#if GPIO_15_EN
+        case GPIO_15:
+            NVIC_DisableIRQ(GPIO_15_IRQ);
+            break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            NVIC_DisableIRQ(GPIO_16_IRQ);
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            NVIC_DisableIRQ(GPIO_17_IRQ);
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            NVIC_DisableIRQ(GPIO_18_IRQ);
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            NVIC_DisableIRQ(GPIO_19_IRQ);
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            NVIC_DisableIRQ(GPIO_20_IRQ);
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            NVIC_DisableIRQ(GPIO_21_IRQ);
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            NVIC_DisableIRQ(GPIO_22_IRQ);
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            NVIC_DisableIRQ(GPIO_23_IRQ);
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            NVIC_DisableIRQ(GPIO_24_IRQ);
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            NVIC_DisableIRQ(GPIO_25_IRQ);
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            NVIC_DisableIRQ(GPIO_26_IRQ);
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            NVIC_DisableIRQ(GPIO_27_IRQ);
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            NVIC_DisableIRQ(GPIO_28_IRQ);
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            NVIC_DisableIRQ(GPIO_29_IRQ);
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            NVIC_DisableIRQ(GPIO_30_IRQ);
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            NVIC_DisableIRQ(GPIO_31_IRQ);
+            break;
+#endif
+    }
+}
+void gpio_irq_enable(gpio_t dev)
+{
+    switch (dev) {
+#if GPIO_0_EN
+        case GPIO_0:
+            NVIC_EnableIRQ(GPIO_0_IRQ);
+            break;
+#endif
+#if GPIO_1_EN
+        case GPIO_1:
+            NVIC_EnableIRQ(GPIO_1_IRQ);
+            break;
+#endif
+#if GPIO_2_EN
+        case GPIO_2:
+            NVIC_EnableIRQ(GPIO_2_IRQ);
+            break;
+#endif
+#if GPIO_3_EN
+        case GPIO_3:
+            NVIC_EnableIRQ(GPIO_3_IRQ);
+            break;
+#endif
+#if GPIO_4_EN
+        case GPIO_4:
+            NVIC_EnableIRQ(GPIO_4_IRQ);
+            break;
+#endif
+#if GPIO_5_EN
+        case GPIO_5:
+            NVIC_EnableIRQ(GPIO_5_IRQ);
+            break;
+#endif
+#if GPIO_6_EN
+        case GPIO_6:
+            NVIC_EnableIRQ(GPIO_6_IRQ);
+            break;
+#endif
+#if GPIO_7_EN
+        case GPIO_7:
+            NVIC_EnableIRQ(GPIO_7_IRQ);
+            break;
+#endif
+#if GPIO_8_EN
+        case GPIO_8:
+            NVIC_EnableIRQ(GPIO_8_IRQ);
+            break;
+#endif
+#if GPIO_9_EN
+        case GPIO_9:
+            NVIC_EnableIRQ(GPIO_9_IRQ);
+            break;
+#endif
+#if GPIO_10_EN
+        case GPIO_10:
+            NVIC_EnableIRQ(GPIO_10_IRQ);
+            break;
+#endif
+#if GPIO_11_EN
+        case GPIO_11:
+            NVIC_EnableIRQ(GPIO_11_IRQ);
+            break;
+#endif
+#if GPIO_12_EN
+        case GPIO_12:
+            NVIC_EnableIRQ(GPIO_12_IRQ);
+            break;
+#endif
+#if GPIO_13_EN
+        case GPIO_13:
+            NVIC_EnableIRQ(GPIO_13_IRQ);
+            break;
+#endif
+#if GPIO_14_EN
+        case GPIO_14:
+            NVIC_EnableIRQ(GPIO_14_IRQ);
+            break;
+#endif
+#if GPIO_15_EN
+        case GPIO_15:
+            NVIC_EnableIRQ(GPIO_15_IRQ);
+            break;
+#endif
+#if GPIO_16_EN
+        case GPIO_16:
+            NVIC_EnableIRQ(GPIO_16_IRQ);
+            break;
+#endif
+#if GPIO_17_EN
+        case GPIO_17:
+            NVIC_EnableIRQ(GPIO_17_IRQ);
+            break;
+#endif
+#if GPIO_18_EN
+        case GPIO_18:
+            NVIC_EnableIRQ(GPIO_18_IRQ);
+            break;
+#endif
+#if GPIO_19_EN
+        case GPIO_19:
+            NVIC_EnableIRQ(GPIO_19_IRQ);
+            break;
+#endif
+#if GPIO_20_EN
+        case GPIO_20:
+            NVIC_EnableIRQ(GPIO_20_IRQ);
+            break;
+#endif
+#if GPIO_21_EN
+        case GPIO_21:
+            NVIC_EnableIRQ(GPIO_21_IRQ);
+            break;
+#endif
+#if GPIO_22_EN
+        case GPIO_22:
+            NVIC_EnableIRQ(GPIO_22_IRQ);
+            break;
+#endif
+#if GPIO_23_EN
+        case GPIO_23:
+            NVIC_EnableIRQ(GPIO_23_IRQ);
+            break;
+#endif
+#if GPIO_24_EN
+        case GPIO_24:
+            NVIC_EnableIRQ(GPIO_24_IRQ);
+            break;
+#endif
+#if GPIO_25_EN
+        case GPIO_25:
+            NVIC_EnableIRQ(GPIO_25_IRQ);
+            break;
+#endif
+#if GPIO_26_EN
+        case GPIO_26:
+            NVIC_EnableIRQ(GPIO_26_IRQ);
+            break;
+#endif
+#if GPIO_27_EN
+        case GPIO_27:
+            NVIC_EnableIRQ(GPIO_27_IRQ);
+            break;
+#endif
+#if GPIO_28_EN
+        case GPIO_28:
+            NVIC_EnableIRQ(GPIO_28_IRQ);
+            break;
+#endif
+#if GPIO_29_EN
+        case GPIO_29:
+            NVIC_EnableIRQ(GPIO_29_IRQ);
+            break;
+#endif
+#if GPIO_30_EN
+        case GPIO_30:
+            NVIC_EnableIRQ(GPIO_30_IRQ);
+            break;
+#endif
+#if GPIO_31_EN
+        case GPIO_31:
+            NVIC_EnableIRQ(GPIO_31_IRQ);
+            break;
+#endif
+    }
+}
+
 void isr_pioa(void)
 {
     uint32_t status = PIOA->PIO_ISR;