summaryrefslogtreecommitdiff
path: root/bsp/stm32
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-01-12 11:20:31 +0800
committerGitHub <[email protected]>2019-01-12 11:20:31 +0800
commit45c86a54ba05028c901f1fdfad0d5c73d4bfe5fc (patch)
tree28a4dd6093715ea8c65ad6c9e54a9f044e8cc02c /bsp/stm32
parent00076153209214195419f12bc3c65de5e29b3fc8 (diff)
parent0e333a3a1072ad134244fa2a3e84053b8656fbb7 (diff)
Merge pull request #2169 from HubertXie/master
[stm32][drv_gpio]增加STM32F0系列GPIO关闭中断处理
Diffstat (limited to 'bsp/stm32')
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_gpio.c103
1 files changed, 66 insertions, 37 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
index b66adb4a68..b10eebd393 100644
--- a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
+++ b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
@@ -544,6 +544,34 @@ static rt_err_t stm32_pin_irq_enable(struct rt_device *device, rt_base_t pin,
HAL_GPIO_DeInit(index->gpio, index->pin);
pin_irq_enable_mask &= ~irqmap->pinbit;
+#if defined(SOC_SERIES_STM32F0)
+ if (( irqmap->pinbit>=GPIO_PIN_0 )&&( irqmap->pinbit<=GPIO_PIN_1 ))
+ {
+ if(!(pin_irq_enable_mask&(GPIO_PIN_0|GPIO_PIN_1)))
+ {
+ HAL_NVIC_DisableIRQ(irqmap->irqno);
+ }
+ }
+ else if (( irqmap->pinbit>=GPIO_PIN_2 )&&( irqmap->pinbit<=GPIO_PIN_3 ))
+ {
+ if(!(pin_irq_enable_mask&(GPIO_PIN_2|GPIO_PIN_3)))
+ {
+ HAL_NVIC_DisableIRQ(irqmap->irqno);
+ }
+ }
+ else if (( irqmap->pinbit>=GPIO_PIN_4 )&&( irqmap->pinbit<=GPIO_PIN_15 ))
+ {
+ if(!(pin_irq_enable_mask&(GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|
+ 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);
+ }
+#else
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)))
@@ -561,12 +589,13 @@ static rt_err_t stm32_pin_irq_enable(struct rt_device *device, rt_base_t pin,
else
{
HAL_NVIC_DisableIRQ(irqmap->irqno);
- }
+ }
+#endif
rt_hw_interrupt_enable(level);
}
else
{
- return RT_ENOSYS;
+ return -RT_ENOSYS;
}
return RT_EOK;
@@ -594,6 +623,40 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
pin_irq_hdr(bit2bitno(GPIO_Pin));
}
+#if defined(SOC_SERIES_STM32F0)
+void EXTI0_1_IRQHandler(void)
+{
+ rt_interrupt_enter();
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
+ rt_interrupt_leave();
+}
+
+void EXTI2_3_IRQHandler(void)
+{
+ rt_interrupt_enter();
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
+ rt_interrupt_leave();
+}
+void EXTI4_15_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
+}
+
+#else
+
void EXTI0_IRQHandler(void)
{
rt_interrupt_enter();
@@ -651,41 +714,7 @@ void EXTI15_10_IRQHandler(void)
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
rt_interrupt_leave();
}
-
-void EXTI0_1_IRQHandler(void)
-{
- rt_interrupt_enter();
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
- rt_interrupt_leave();
-}
-
-void EXTI2_3_IRQHandler(void)
-{
- rt_interrupt_enter();
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
- rt_interrupt_leave();
-}
-void EXTI4_15_IRQHandler(void)
-{
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
-}
+#endif
int rt_hw_pin_init(void)
{