Browse Source

[stm32][drv_gpio]增加对Stm32f0系列关中断处理方式

增加stm32f0系列GPIO关中断处理
HubretXie 6 years ago
parent
commit
bdc0e4f540
1 changed files with 70 additions and 37 deletions
  1. 70 37
      bsp/stm32/libraries/HAL_Drivers/drv_gpio.c

+ 70 - 37
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);
         HAL_GPIO_DeInit(index->gpio, index->pin);
 
 
         pin_irq_enable_mask &= ~irqmap->pinbit;
         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 (( 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)))
             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
         else
         {
         {
             HAL_NVIC_DisableIRQ(irqmap->irqno);
             HAL_NVIC_DisableIRQ(irqmap->irqno);
-        }
+        }        
+#endif          
         rt_hw_interrupt_enable(level);  
         rt_hw_interrupt_enable(level);  
     }
     }
     else
     else
     {
     {
-        return RT_ENOSYS;
+        return -RT_ENOSYS;
     }
     }
 
 
     return RT_EOK;
     return RT_EOK;
@@ -594,6 +623,44 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
     pin_irq_hdr(bit2bitno(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_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);
+}
+
+#else
+
 void EXTI0_IRQHandler(void)
 void EXTI0_IRQHandler(void)
 {
 {
     rt_interrupt_enter();
     rt_interrupt_enter();
@@ -651,41 +718,7 @@ void EXTI15_10_IRQHandler(void)
     HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
     HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
     rt_interrupt_leave();
     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)
 int rt_hw_pin_init(void)
 {
 {