1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

cpu/stm32f1:board/iot-lab_M3: fix and cleanup for GPIO low level driver

This commit is contained in:
Thomas Eichinger 2014-10-02 01:03:09 +02:00
parent c27e250de4
commit 19db6ded85
2 changed files with 139 additions and 159 deletions

View File

@ -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

View File

@ -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