diff --git a/drivers/gpio/gpio_stm32.c b/drivers/gpio/gpio_stm32.c index 9ecedfefa2f..54de75f3192 100644 --- a/drivers/gpio/gpio_stm32.c +++ b/drivers/gpio/gpio_stm32.c @@ -517,8 +517,7 @@ static int gpio_stm32_pin_interrupt_configure(struct device *dev, edge = STM32_EXTI_TRIG_RISING; break; case GPIO_INT_TRIG_BOTH: - edge = STM32_EXTI_TRIG_RISING | - STM32_EXTI_TRIG_FALLING; + edge = STM32_EXTI_TRIG_BOTH; break; } diff --git a/drivers/interrupt_controller/intc_exti_stm32.c b/drivers/interrupt_controller/intc_exti_stm32.c index 3279ae6c9ce..43c672b57b6 100644 --- a/drivers/interrupt_controller/intc_exti_stm32.c +++ b/drivers/interrupt_controller/intc_exti_stm32.c @@ -120,9 +120,7 @@ void stm32_exti_disable(int line) if (line < 32) { LL_EXTI_DisableIT_0_31(1 << line); } else { - __ASSERT_NO_MSG(line); - } } @@ -167,20 +165,29 @@ static inline void stm32_exti_clear_pending(int line) void stm32_exti_trigger(int line, int trigger) { - if (trigger & STM32_EXTI_TRIG_RISING) { - if (line < 32) { - LL_EXTI_EnableRisingTrig_0_31(1 << line); - } else { - __ASSERT_NO_MSG(line); - } + + if (line >= 32) { + __ASSERT_NO_MSG(line); } - if (trigger & STM32_EXTI_TRIG_FALLING) { - if (line < 32) { - LL_EXTI_EnableFallingTrig_0_31(1 << line); - } else { - __ASSERT_NO_MSG(line); - } + switch (trigger) { + case STM32_EXTI_TRIG_NONE: + LL_EXTI_DisableRisingTrig_0_31(1 << line); + LL_EXTI_DisableFallingTrig_0_31(1 << line); + break; + case STM32_EXTI_TRIG_RISING: + LL_EXTI_EnableRisingTrig_0_31(1 << line); + LL_EXTI_DisableFallingTrig_0_31(1 << line); + break; + case STM32_EXTI_TRIG_FALLING: + LL_EXTI_EnableFallingTrig_0_31(1 << line); + LL_EXTI_DisableRisingTrig_0_31(1 << line); + break; + case STM32_EXTI_TRIG_BOTH: + LL_EXTI_EnableRisingTrig_0_31(1 << line); + LL_EXTI_EnableFallingTrig_0_31(1 << line); + default: + __ASSERT_NO_MSG(trigger); } } diff --git a/include/drivers/interrupt_controller/exti_stm32.h b/include/drivers/interrupt_controller/exti_stm32.h index 0646f9a8f32..12d556c9b00 100644 --- a/include/drivers/interrupt_controller/exti_stm32.h +++ b/include/drivers/interrupt_controller/exti_stm32.h @@ -44,10 +44,14 @@ void stm32_exti_disable(int line); * @brief EXTI trigger flags */ enum stm32_exti_trigger { + /* clear trigger */ + STM32_EXTI_TRIG_NONE = 0x0, /* trigger on rising edge */ STM32_EXTI_TRIG_RISING = 0x1, /* trigger on falling endge */ STM32_EXTI_TRIG_FALLING = 0x2, + /* trigger on falling endge */ + STM32_EXTI_TRIG_BOTH = 0x3, }; /**