From 19db6ded8538a6a32717f75ce9ec7192b773cc9b Mon Sep 17 00:00:00 2001 From: Thomas Eichinger Date: Thu, 2 Oct 2014 01:03:09 +0200 Subject: [PATCH] cpu/stm32f1:board/iot-lab_M3: fix and cleanup for GPIO low level driver --- boards/iot-lab_M3/include/periph_conf.h | 80 ++++----- cpu/stm32f1/periph/gpio.c | 218 ++++++++++++------------ 2 files changed, 139 insertions(+), 159 deletions(-) diff --git a/boards/iot-lab_M3/include/periph_conf.h b/boards/iot-lab_M3/include/periph_conf.h index 32b7ea1a2d..8a3bebadbf 100644 --- a/boards/iot-lab_M3/include/periph_conf.h +++ b/boards/iot-lab_M3/include/periph_conf.h @@ -112,7 +112,7 @@ /** * @brief GPIO configuration */ -#define GPIO_NUMOF 16 +#define GPIO_NUMOF 15 #define GPIO_0_EN 1 #define GPIO_1_EN 1 #define GPIO_2_EN 1 @@ -128,139 +128,119 @@ #define GPIO_12_EN 1 #define GPIO_13_EN 1 #define GPIO_14_EN 1 -#define GPIO_15_EN 0 /* not configured */ #define GPIO_IRQ_PRIO 1 -/* IRQ config */ -#define GPIO_IRQ_0 GPIO_0 -#define GPIO_IRQ_1 GPIO_1 -#define GPIO_IRQ_2 GPIO_0 /* not configured */ -#define GPIO_IRQ_3 GPIO_0 /* not configured */ -#define GPIO_IRQ_4 GPIO_2 -#define GPIO_IRQ_5 GPIO_3 -#define GPIO_IRQ_6 GPIO_4 +/** + * @brief IRQ config + * + * These defines are used for the backmapping in the matching interrupt + * service routines to call the correct callbacks. + * GPIO_IRQ_x where x matches the value defined by GPIO_y_PIN + */ +#define GPIO_IRQ_1 GPIO_13 +#define GPIO_IRQ_2 GPIO_14 +#define GPIO_IRQ_3 GPIO_0 +#define GPIO_IRQ_4 GPIO_12 +#define GPIO_IRQ_5 GPIO_8 +#define GPIO_IRQ_6 GPIO_9 #define GPIO_IRQ_7 GPIO_5 -#define GPIO_IRQ_8 GPIO_0 /* not configured */ -#define GPIO_IRQ_9 GPIO_0 /* not configured */ -#define GPIO_IRQ_10 GPIO_6 +#define GPIO_IRQ_8 GPIO_1 +#define GPIO_IRQ_9 GPIO_4 #define GPIO_IRQ_11 GPIO_7 -#define GPIO_IRQ_12 GPIO_4 +#define GPIO_IRQ_12 GPIO_2 #define GPIO_IRQ_13 GPIO_9 #define GPIO_IRQ_14 GPIO_10 -#define GPIO_IRQ_15 GPIO_11 /* GPIO channel 0 config */ #define GPIO_0_PORT GPIOA /* Used for user button 1 */ #define GPIO_0_PIN 3 #define GPIO_0_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_0_EXTI_CFG() (AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI3_PA) -#define GPIO_0_EXTI_LINE 4 -#define GPIO_0_IRQ EXTI4_IRQn +#define GPIO_0_IRQ EXTI3_IRQn /* GPIO channel 1 config */ #define GPIO_1_PORT GPIOA #define GPIO_1_PIN 8 #define GPIO_1_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_1_EXTI_CFG() (AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI8_PA) -#define GPIO_1_EXTI_LINE 4 -#define GPIO_1_IRQ EXTI4_IRQn +#define GPIO_1_IRQ EXTI9_5_IRQn /* GPIO channel 2 config */ #define GPIO_2_PORT GPIOA #define GPIO_2_PIN 12 #define GPIO_2_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_2_EXTI_CFG() (AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI12_PA) -#define GPIO_2_EXTI_LINE 4 -#define GPIO_2_IRQ EXTI4_IRQn +#define GPIO_2_IRQ EXTI15_10_IRQn /* GPIO channel 3 config */ #define GPIO_3_PORT GPIOB #define GPIO_3_PIN 8 #define GPIO_3_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPBEN) #define GPIO_3_EXTI_CFG() (AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI8_PB) -#define GPIO_3_EXTI_LINE 4 -#define GPIO_3_IRQ EXTI4_IRQn +#define GPIO_3_IRQ EXTI9_5_IRQn /* GPIO channel 4 config */ #define GPIO_4_PORT GPIOB #define GPIO_4_PIN 9 #define GPIO_4_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPBEN) #define GPIO_4_EXTI_CFG() (AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI9_PB) -#define GPIO_4_EXTI_LINE 4 -#define GPIO_4_IRQ EXTI4_IRQn +#define GPIO_4_IRQ EXTI9_5_IRQn /* GPIO channel 5 config */ #define GPIO_5_PORT GPIOC #define GPIO_5_PIN 7 #define GPIO_5_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN) #define GPIO_5_EXTI_CFG() (AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI7_PC) -#define GPIO_5_EXTI_LINE 4 -#define GPIO_5_IRQ EXTI4_IRQn +#define GPIO_5_IRQ EXTI9_5_IRQn /* GPIO channel 6 config */ #define GPIO_6_PORT GPIOC #define GPIO_6_PIN 8 #define GPIO_6_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN) #define GPIO_6_EXTI_CFG() (AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI8_PC) -#define GPIO_6_EXTI_LINE 4 -#define GPIO_6_IRQ EXTI3_IRQn +#define GPIO_6_IRQ EXTI9_5_IRQn /* GPIO channel 7 config */ #define GPIO_7_PORT GPIOC #define GPIO_7_PIN 11 #define GPIO_7_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN) #define GPIO_7_EXTI_CFG() (AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI11_PC) -#define GPIO_7_EXTI_LINE 4 -#define GPIO_7_IRQ EXTI3_IRQn +#define GPIO_7_IRQ EXTI15_10_IRQn /* GPIO channel 8 config */ #define GPIO_8_PORT GPIOA #define GPIO_8_PIN 5 #define GPIO_8_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_8_EXTI_CFG() (AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI5_PA) -#define GPIO_8_EXTI_LINE 4 -#define GPIO_8_IRQ EXTI4_IRQn +#define GPIO_8_IRQ EXTI9_5_IRQn /* GPIO channel 9 config */ #define GPIO_9_PORT GPIOA #define GPIO_9_PIN 6 #define GPIO_9_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_9_EXTI_CFG() (AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI6_PA) -#define GPIO_9_EXTI_LINE 4 -#define GPIO_9_IRQ EXTI4_IRQn +#define GPIO_9_IRQ EXTI9_5_IRQn /* GPIO channel 10 config */ #define GPIO_10_PORT GPIOA #define GPIO_10_PIN 7 #define GPIO_10_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_10_EXTI_CFG() (AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI7_PA) -#define GPIO_10_EXTI_LINE 4 -#define GPIO_10_IRQ EXTI4_IRQn +#define GPIO_10_IRQ EXTI9_5_IRQn /* GPIO channel 11 config */ #define GPIO_11_PORT GPIOA #define GPIO_11_PIN 4 #define GPIO_11_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_11_EXTI_CFG() (AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI4_PA) -#define GPIO_11_EXTI_LINE 4 #define GPIO_11_IRQ EXTI4_IRQn /* GPIO channel 12 config */ #define GPIO_12_PORT GPIOC #define GPIO_12_PIN 4 #define GPIO_12_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN) #define GPIO_12_EXTI_CFG() (AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI4_PC) -#define GPIO_12_EXTI_LINE 4 #define GPIO_12_IRQ EXTI4_IRQn /* GPIO channel 13 config */ #define GPIO_13_PORT GPIOC #define GPIO_13_PIN 1 #define GPIO_13_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN) #define GPIO_13_EXTI_CFG() (AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI1_PC) -#define GPIO_13_EXTI_LINE 4 -#define GPIO_13_IRQ EXTI4_IRQn +#define GPIO_13_IRQ EXTI1_IRQn /* GPIO channel 14 config */ #define GPIO_14_PORT GPIOA #define GPIO_14_PIN 2 #define GPIO_14_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPAEN) #define GPIO_14_EXTI_CFG() (AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI2_PA) -#define GPIO_14_EXTI_LINE 4 -#define GPIO_14_IRQ EXTI4_IRQn -/* GPIO channel 15 config */ -#define GPIO_15_PORT GPIOC -#define GPIO_15_PIN 15 -#define GPIO_15_CLKEN() (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN) -#define GPIO_15_EXTI_CFG() (AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI15_PC) -#define GPIO_15_EXTI_LINE 4 -#define GPIO_15_IRQ EXTI4_IRQn +#define GPIO_14_IRQ EXTI2_IRQn /** * @brief SPI configuration diff --git a/cpu/stm32f1/periph/gpio.c b/cpu/stm32f1/periph/gpio.c index fbe654ff40..da79d403b4 100644 --- a/cpu/stm32f1/periph/gpio.c +++ b/cpu/stm32f1/periph/gpio.c @@ -335,8 +335,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb switch (dev) { #if GPIO_0_EN case GPIO_0: - exti_line = GPIO_0_EXTI_LINE; - gpio_irq = GPIO_IRQ_0; + exti_line = GPIO_0_PIN; + gpio_irq = GPIO_0; GPIO_0_EXTI_CFG(); NVIC_SetPriority(GPIO_0_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_0_IRQ); @@ -344,8 +344,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_1_EN case GPIO_1: - exti_line = GPIO_1_EXTI_LINE; - gpio_irq = GPIO_IRQ_1; + exti_line = GPIO_1_PIN; + gpio_irq = GPIO_1; GPIO_1_EXTI_CFG(); NVIC_SetPriority(GPIO_1_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_1_IRQ); @@ -353,8 +353,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_2_EN case GPIO_2: - exti_line = GPIO_2_EXTI_LINE; - gpio_irq = GPIO_IRQ_2; + exti_line = GPIO_2_PIN; + gpio_irq = GPIO_2; GPIO_2_EXTI_CFG(); NVIC_SetPriority(GPIO_2_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_2_IRQ); @@ -362,8 +362,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_3_EN case GPIO_3: - exti_line = GPIO_3_EXTI_LINE; - gpio_irq = GPIO_IRQ_3; + exti_line = GPIO_3_PIN; + gpio_irq = GPIO_3; GPIO_3_EXTI_CFG(); NVIC_SetPriority(GPIO_3_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_3_IRQ); @@ -371,8 +371,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_4_EN case GPIO_4: - exti_line = GPIO_4_EXTI_LINE; - gpio_irq = GPIO_IRQ_4; + exti_line = GPIO_4_PIN; + gpio_irq = GPIO_4; GPIO_4_EXTI_CFG(); NVIC_SetPriority(GPIO_4_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_4_IRQ); @@ -380,8 +380,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_5_EN case GPIO_5: - exti_line = GPIO_5_EXTI_LINE; - gpio_irq = GPIO_IRQ_5; + exti_line = GPIO_5_PIN; + gpio_irq = GPIO_5; GPIO_5_EXTI_CFG(); NVIC_SetPriority(GPIO_5_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_5_IRQ); @@ -389,8 +389,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_6_EN case GPIO_6: - exti_line = GPIO_6_EXTI_LINE; - gpio_irq = GPIO_IRQ_6; + exti_line = GPIO_6_PIN; + gpio_irq = GPIO_6; GPIO_6_EXTI_CFG(); NVIC_SetPriority(GPIO_6_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_6_IRQ); @@ -398,8 +398,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_7_EN case GPIO_7: - exti_line = GPIO_7_EXTI_LINE; - gpio_irq = GPIO_IRQ_7; + exti_line = GPIO_7_PIN; + gpio_irq = GPIO_7; GPIO_7_EXTI_CFG(); NVIC_SetPriority(GPIO_7_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_7_IRQ); @@ -407,8 +407,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_8_EN case GPIO_8: - exti_line = GPIO_8_EXTI_LINE; - gpio_irq = GPIO_IRQ_8; + exti_line = GPIO_8_PIN; + gpio_irq = GPIO_8; GPIO_8_EXTI_CFG(); NVIC_SetPriority(GPIO_8_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_8_IRQ); @@ -416,8 +416,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_9_EN case GPIO_9: - exti_line = GPIO_9_EXTI_LINE; - gpio_irq = GPIO_IRQ_9; + exti_line = GPIO_9_PIN; + gpio_irq = GPIO_9; GPIO_9_EXTI_CFG(); NVIC_SetPriority(GPIO_9_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_9_IRQ); @@ -425,8 +425,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_10_EN case GPIO_10: - exti_line = GPIO_10_EXTI_LINE; - gpio_irq = GPIO_IRQ_10; + exti_line = GPIO_10_PIN; + gpio_irq = GPIO_10; GPIO_10_EXTI_CFG(); NVIC_SetPriority(GPIO_10_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_10_IRQ); @@ -434,8 +434,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_11_EN case GPIO_11: - exti_line = GPIO_11_EXTI_LINE; - gpio_irq = GPIO_IRQ_11; + exti_line = GPIO_11_PIN; + gpio_irq = GPIO_11; GPIO_11_EXTI_CFG(); NVIC_SetPriority(GPIO_11_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_11_IRQ); @@ -443,8 +443,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_12_EN case GPIO_12: - exti_line = GPIO_12_EXTI_LINE; - gpio_irq = GPIO_IRQ_12; + exti_line = GPIO_12_PIN; + gpio_irq = GPIO_12; GPIO_12_EXTI_CFG(); NVIC_SetPriority(GPIO_12_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_12_IRQ); @@ -452,8 +452,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_13_EN case GPIO_13: - exti_line = GPIO_13_EXTI_LINE; - gpio_irq = GPIO_IRQ_13; + exti_line = GPIO_13_PIN; + gpio_irq = GPIO_13; GPIO_13_EXTI_CFG(); NVIC_SetPriority(GPIO_13_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_13_IRQ); @@ -461,8 +461,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_14_EN case GPIO_14: - exti_line = GPIO_14_EXTI_LINE; - gpio_irq = GPIO_IRQ_14; + exti_line = GPIO_14_PIN; + gpio_irq = GPIO_14; GPIO_14_EXTI_CFG(); NVIC_SetPriority(GPIO_14_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_14_IRQ); @@ -470,8 +470,8 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb #endif #if GPIO_15_EN case GPIO_15: - exti_line = GPIO_15_EXTI_LINE; - gpio_irq = GPIO_IRQ_15; + exti_line = GPIO_15_PIN; + gpio_irq = GPIO_15; GPIO_15_EXTI_CFG(); NVIC_SetPriority(GPIO_15_IRQ, GPIO_IRQ_PRIO); NVIC_EnableIRQ(GPIO_15_IRQ); @@ -515,89 +515,87 @@ void gpio_irq_enable(gpio_t dev) switch(dev) { #if GPIO_0_EN case GPIO_0: - exti_line = GPIO_0_EXTI_LINE; + exti_line = GPIO_0_PIN; break; #endif #if GPIO_1_EN case GPIO_1: - exti_line = GPIO_1_EXTI_LINE; + exti_line = GPIO_1_PIN; break; #endif #if GPIO_2_EN case GPIO_2: - exti_line = GPIO_2_EXTI_LINE; + exti_line = GPIO_2_PIN; break; #endif #if GPIO_3_EN case GPIO_3: - exti_line = GPIO_3_EXTI_LINE; + exti_line = GPIO_3_PIN; break; #endif #if GPIO_4_EN case GPIO_4: - exti_line = GPIO_4_EXTI_LINE; + exti_line = GPIO_4_PIN; break; #endif #if GPIO_5_EN case GPIO_5: - exti_line = GPIO_5_EXTI_LINE; + exti_line = GPIO_5_PIN; break; #endif #if GPIO_6_EN case GPIO_6: - exti_line = GPIO_6_EXTI_LINE; + exti_line = GPIO_6_PIN; break; #endif #if GPIO_7_EN case GPIO_7: - exti_line = GPIO_7_EXTI_LINE; + exti_line = GPIO_7_PIN; break; #endif #if GPIO_8_EN case GPIO_8: - exti_line = GPIO_8_EXTI_LINE; + exti_line = GPIO_8_PIN; break; #endif #if GPIO_9_EN case GPIO_9: - exti_line = GPIO_9_EXTI_LINE; + exti_line = GPIO_9_PIN; break; #endif #if GPIO_10_EN case GPIO_10: - exti_line = GPIO_10_EXTI_LINE; + exti_line = GPIO_10_PIN; break; #endif #if GPIO_11_EN case GPIO_11: - exti_line = GPIO_11_EXTI_LINE; + exti_line = GPIO_11_PIN; break; #endif #if GPIO_12_EN case GPIO_12: - exti_line = GPIO_12_EXTI_LINE; + exti_line = GPIO_12_PIN; break; #endif #if GPIO_13_EN case GPIO_13: - exti_line = GPIO_13_EXTI_LINE; + exti_line = GPIO_13_PIN; break; #endif #if GPIO_14_EN case GPIO_14: - exti_line = GPIO_14_EXTI_LINE; + exti_line = GPIO_14_PIN; break; #endif #if GPIO_15_EN case GPIO_15: - exti_line = GPIO_15_EXTI_LINE; + exti_line = GPIO_15_PIN; break; #endif default: return; } - /* save state */ - // int state = (EXTI->IMR & (1 << exti_line) >> exti_line); /* unmask the pins interrupt channel */ EXTI->IMR |= (1 << exti_line); @@ -612,89 +610,87 @@ void gpio_irq_disable(gpio_t dev) switch(dev) { #if GPIO_0_EN case GPIO_0: - exti_line = GPIO_0_EXTI_LINE; + exti_line = GPIO_0_PIN; break; #endif #if GPIO_1_EN case GPIO_1: - exti_line = GPIO_1_EXTI_LINE; + exti_line = GPIO_1_PIN; break; #endif #if GPIO_2_EN case GPIO_2: - exti_line = GPIO_2_EXTI_LINE; + exti_line = GPIO_2_PIN; break; #endif #if GPIO_3_EN case GPIO_3: - exti_line = GPIO_3_EXTI_LINE; + exti_line = GPIO_3_PIN; break; #endif #if GPIO_4_EN case GPIO_4: - exti_line = GPIO_4_EXTI_LINE; + exti_line = GPIO_4_PIN; break; #endif #if GPIO_5_EN case GPIO_5: - exti_line = GPIO_5_EXTI_LINE; + exti_line = GPIO_5_PIN; break; #endif #if GPIO_6_EN case GPIO_6: - exti_line = GPIO_6_EXTI_LINE; + exti_line = GPIO_6_PIN; break; #endif #if GPIO_7_EN case GPIO_7: - exti_line = GPIO_7_EXTI_LINE; + exti_line = GPIO_7_PIN; break; #endif #if GPIO_8_EN case GPIO_8: - exti_line = GPIO_8_EXTI_LINE; + exti_line = GPIO_8_PIN; break; #endif #if GPIO_9_EN case GPIO_9: - exti_line = GPIO_9_EXTI_LINE; + exti_line = GPIO_9_PIN; break; #endif #if GPIO_10_EN case GPIO_10: - exti_line = GPIO_10_EXTI_LINE; + exti_line = GPIO_10_PIN; break; #endif #if GPIO_11_EN case GPIO_11: - exti_line = GPIO_11_EXTI_LINE; + exti_line = GPIO_11_PIN; break; #endif #if GPIO_12_EN case GPIO_12: - exti_line = GPIO_12_EXTI_LINE; + exti_line = GPIO_12_PIN; break; #endif #if GPIO_13_EN case GPIO_13: - exti_line = GPIO_13_EXTI_LINE; + exti_line = GPIO_13_PIN; break; #endif #if GPIO_14_EN case GPIO_14: - exti_line = GPIO_14_EXTI_LINE; + exti_line = GPIO_14_PIN; break; #endif #if GPIO_15_EN case GPIO_15: - exti_line = GPIO_15_EXTI_LINE; + exti_line = GPIO_15_PIN; break; #endif default: return; } - // /* save state */ - // int state = ((EXTI->IMR & (1 << exti_line)) >> exti_line); /* unmask the pins interrupt channel */ EXTI->IMR &= ~(1 << exti_line); @@ -1017,13 +1013,13 @@ void gpio_write(gpio_t dev, int value) } } -#if GPIO_IRQ_0 +#ifdef GPIO_IRQ_0 __attribute__((naked)) void isr_exti0(void) { ISR_ENTER(); if (EXTI->PR & EXTI_PR_PR0) { EXTI->PR |= EXTI_PR_PR0; /* clear status bit by writing a 1 to it */ - config[GPIO_0].cb(config[GPIO_0].arg); + config[GPIO_IRQ_0].cb(config[GPIO_IRQ_0].arg); } if (sched_context_switch_request) { @@ -1033,13 +1029,13 @@ __attribute__((naked)) void isr_exti0(void) } #endif -#if GPIO_IRQ_1 +#ifdef GPIO_IRQ_1 __attribute__((naked)) void isr_exti1(void) { ISR_ENTER(); if (EXTI->PR & EXTI_PR_PR1) { EXTI->PR |= EXTI_PR_PR1; /* clear status bit by writing a 1 to it */ - config[GPIO_1].cb(config[GPIO_1].arg); + config[GPIO_IRQ_1].cb(config[GPIO_IRQ_1].arg); } if (sched_context_switch_request) { @@ -1049,13 +1045,13 @@ __attribute__((naked)) void isr_exti1(void) } #endif -#if GPIO_IRQ_2 +#ifdef GPIO_IRQ_2 __attribute__((naked)) void isr_exti2(void) { ISR_ENTER(); if (EXTI->PR & EXTI_PR_PR2) { EXTI->PR |= EXTI_PR_PR2; /* clear status bit by writing a 1 to it */ - config[GPIO_2].cb(config[GPIO_2].arg); + config[GPIO_IRQ_2].cb(config[GPIO_IRQ_2].arg); } if (sched_context_switch_request) { @@ -1065,13 +1061,13 @@ __attribute__((naked)) void isr_exti2(void) } #endif -#if GPIO_IRQ_3 +#ifdef GPIO_IRQ_3 __attribute__((naked)) void isr_exti3(void) { ISR_ENTER(); if (EXTI->PR & EXTI_PR_PR3) { EXTI->PR |= EXTI_PR_PR3; /* clear status bit by writing a 1 to it */ - config[GPIO_3].cb(config[GPIO_3].arg); + config[GPIO_IRQ_3].cb(config[GPIO_IRQ_3].arg); } if (sched_context_switch_request) { @@ -1081,13 +1077,13 @@ __attribute__((naked)) void isr_exti3(void) } #endif -#if GPIO_IRQ_4 +#ifdef GPIO_IRQ_4 __attribute__((naked)) void isr_exti4(void) { ISR_ENTER(); if (EXTI->PR & EXTI_PR_PR4) { EXTI->PR |= EXTI_PR_PR4; /* clear status bit by writing a 1 to it */ - config[GPIO_4].cb(config[GPIO_4].arg); + config[GPIO_IRQ_4].cb(config[GPIO_IRQ_4].arg); } if (sched_context_switch_request) { @@ -1097,37 +1093,38 @@ __attribute__((naked)) void isr_exti4(void) } #endif +#if defined(GPIO_IRQ_5) || defined(GPIO_IRQ_6) || defined(GPIO_IRQ_7) || defined(GPIO_IRQ_8) || defined(GPIO_IRQ_9) __attribute__((naked)) void isr_exti9_5(void) { ISR_ENTER(); -#if GPIO_IRQ_5 +#ifdef GPIO_IRQ_5 if (EXTI->PR & EXTI_PR_PR5) { EXTI->PR |= EXTI_PR_PR5; /* clear status bit by writing a 1 to it */ - config[GPIO_5].cb(config[GPIO_5].arg); + config[GPIO_IRQ_5].cb(config[GPIO_IRQ_5].arg); } #endif -#if GPIO_IRQ_6 - else if (EXTI->PR & EXTI_PR_PR6) { +#ifdef GPIO_IRQ_6 + if (EXTI->PR & EXTI_PR_PR6) { EXTI->PR |= EXTI_PR_PR6; /* clear status bit by writing a 1 to it */ - config[GPIO_6].cb(config[GPIO_6].arg); + config[GPIO_IRQ_6].cb(config[GPIO_IRQ_6].arg); } #endif -#if GPIO_IRQ_7 - else if (EXTI->PR & EXTI_PR_PR7) { +#ifdef GPIO_IRQ_7 + if (EXTI->PR & EXTI_PR_PR7) { EXTI->PR |= EXTI_PR_PR7; /* clear status bit by writing a 1 to it */ - config[GPIO_7].cb(config[GPIO_7].arg); + config[GPIO_IRQ_7].cb(config[GPIO_IRQ_7].arg); } #endif -#if GPIO_IRQ_8 - else if (EXTI->PR & EXTI_PR_PR8) { +#ifdef GPIO_IRQ_8 + if (EXTI->PR & EXTI_PR_PR8) { EXTI->PR |= EXTI_PR_PR8; /* clear status bit by writing a 1 to it */ - config[GPIO_8].cb(config[GPIO_8].arg); + config[GPIO_IRQ_8].cb(config[GPIO_IRQ_8].arg); } #endif -#if GPIO_IRQ_9 - else if (EXTI->PR & EXTI_PR_PR9) { +#ifdef GPIO_IRQ_9 + if (EXTI->PR & EXTI_PR_PR9) { EXTI->PR |= EXTI_PR_PR9; /* clear status bit by writing a 1 to it */ - config[GPIO_9].cb(config[GPIO_9].arg); + config[GPIO_IRQ_9].cb(config[GPIO_IRQ_9].arg); } #endif if (sched_context_switch_request) { @@ -1135,44 +1132,46 @@ __attribute__((naked)) void isr_exti9_5(void) } ISR_EXIT(); } +#endif +#if defined(GPIO_IRQ_10) || defined(GPIO_IRQ_11) || defined(GPIO_IRQ_12) || defined(GPIO_IRQ_13) || defined(GPIO_IRQ_14) || defined(GPIO_IRQ_15) __attribute__((naked)) void isr_exti15_10(void) { ISR_ENTER(); -#if GPIO_IRQ_10 +#ifdef GPIO_IRQ_10 if (EXTI->PR & EXTI_PR_PR10) { EXTI->PR |= EXTI_PR_PR10; /* clear status bit by writing a 1 to it */ - config[GPIO_10].cb(config[GPIO_10].arg); + config[GPIO_IRQ_10].cb(config[GPIO_IRQ_10].arg); } #endif -#if GPIO_IRQ_11 - else if (EXTI->PR & EXTI_PR_PR11) { +#ifdef GPIO_IRQ_11 + if (EXTI->PR & EXTI_PR_PR11) { EXTI->PR |= EXTI_PR_PR11; /* clear status bit by writing a 1 to it */ - config[GPIO_11].cb(config[GPIO_11].arg); + config[GPIO_IRQ_11].cb(config[GPIO_IRQ_11].arg); } #endif -#if GPIO_IRQ_12 - else if (EXTI->PR & EXTI_PR_PR12) { +#ifdef GPIO_IRQ_12 + if (EXTI->PR & EXTI_PR_PR12) { EXTI->PR |= EXTI_PR_PR12; /* clear status bit by writing a 1 to it */ - config[GPIO_12].cb(config[GPIO_12].arg); + config[GPIO_IRQ_12].cb(config[GPIO_IRQ_12].arg); } #endif -#if GPIO_IRQ_13 - else if (EXTI->PR & EXTI_PR_PR13) { +#ifdef GPIO_IRQ_13 + if (EXTI->PR & EXTI_PR_PR13) { EXTI->PR |= EXTI_PR_PR13; /* clear status bit by writing a 1 to it */ - config[GPIO_13].cb(config[GPIO_13].arg); + config[GPIO_IRQ_13].cb(config[GPIO_IRQ_13].arg); } #endif -#if GPIO_IRQ_14 - else if (EXTI->PR & EXTI_PR_PR14) { +#ifdef GPIO_IRQ_14 + if (EXTI->PR & EXTI_PR_PR14) { EXTI->PR |= EXTI_PR_PR14; /* clear status bit by writing a 1 to it */ - config[GPIO_14].cb(config[GPIO_14].arg); + config[GPIO_IRQ_14].cb(config[GPIO_IRQ_14].arg); } #endif -#if GPIO_IRQ_15 - else if (EXTI->PR & EXTI_PR_PR15) { +#ifdef GPIO_IRQ_15 + if (EXTI->PR & EXTI_PR_PR15) { EXTI->PR |= EXTI_PR_PR15; /* clear status bit by writing a 1 to it */ - config[GPIO_15].cb(config[GPIO_15].arg); + config[GPIO_IRQ_15].cb(config[GPIO_IRQ_15].arg); } #endif if (sched_context_switch_request) { @@ -1180,5 +1179,6 @@ __attribute__((naked)) void isr_exti15_10(void) } ISR_EXIT(); } +#endif #endif