summaryrefslogtreecommitdiff
path: root/bsp/stm32/libraries
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-01-08 07:34:36 +0800
committerGitHub <[email protected]>2019-01-08 07:34:36 +0800
commit3d95a0359782157ad266f4bbc55a45dc22465e3e (patch)
treea8d91ae3e3cb6e32850b8ae6bd3e6335aae0c019 /bsp/stm32/libraries
parent553e05871e3ef6bc393d88ff092d1350c1740726 (diff)
parentc51f27797e332cb9a73cfbde7b1370a8ca59684d (diff)
Merge pull request #2101 from HubertXie/master
[drv_gpio]修改GPIO驱动关中断处理方式
Diffstat (limited to 'bsp/stm32/libraries')
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_gpio.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
index e4b742a4a1..b66adb4a68 100644
--- a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
+++ b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
@@ -273,6 +273,7 @@ static struct rt_pin_irq_hdr pin_irq_hdr_tab[] =
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
};
+static uint32_t pin_irq_enable_mask=0;
#define ITEM_NUM(items) sizeof(items) / sizeof(items[0])
static const struct pin_index *get_pin(uint8_t pin)
@@ -526,6 +527,7 @@ static rt_err_t stm32_pin_irq_enable(struct rt_device *device, rt_base_t pin,
HAL_NVIC_SetPriority(irqmap->irqno, 5, 0);
HAL_NVIC_EnableIRQ(irqmap->irqno);
+ pin_irq_enable_mask |= irqmap->pinbit;
rt_hw_interrupt_enable(level);
}
@@ -537,7 +539,30 @@ static rt_err_t stm32_pin_irq_enable(struct rt_device *device, rt_base_t pin,
return RT_ENOSYS;
}
- HAL_NVIC_DisableIRQ(irqmap->irqno);
+ level = rt_hw_interrupt_disable();
+
+ HAL_GPIO_DeInit(index->gpio, index->pin);
+
+ pin_irq_enable_mask &= ~irqmap->pinbit;
+ if (( irqmap->pinbit>=GPIO_PIN_5 )&&( irqmap->pinbit<=GPIO_PIN_9 ))
+ {
+ if(!(pin_irq_enable_mask&(GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9)))
+ {
+ HAL_NVIC_DisableIRQ(irqmap->irqno);
+ }
+ }
+ else if (( irqmap->pinbit>=GPIO_PIN_10 )&&( irqmap->pinbit<=GPIO_PIN_15 ))
+ {
+ if(!(pin_irq_enable_mask&(GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15)))
+ {
+ HAL_NVIC_DisableIRQ(irqmap->irqno);
+ }
+ }
+ else
+ {
+ HAL_NVIC_DisableIRQ(irqmap->irqno);
+ }
+ rt_hw_interrupt_enable(level);
}
else
{