From 1791bbd354b0d48704253aefa9fd215066bb9d8c Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 14 Jul 2023 10:04:54 +0200 Subject: [PATCH] chore: Move gt911 touch to generic EXTI driver (#3797) * Move gt911 touch to generic EXTI driver * Further cleaning * chore: further cleaning --- .../common/arm/stm32/stm32_exti_driver.cpp | 12 ++++++ radio/src/targets/horus/hal.h | 13 +++--- radio/src/targets/horus/tp_gt911.cpp | 43 +++++-------------- 3 files changed, 27 insertions(+), 41 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/stm32_exti_driver.cpp b/radio/src/targets/common/arm/stm32/stm32_exti_driver.cpp index 1f913d41e..900c1ba3e 100644 --- a/radio/src/targets/common/arm/stm32/stm32_exti_driver.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_exti_driver.cpp @@ -67,6 +67,10 @@ _DEFINE_EXTI_IRQ_HANDLER(EXTI1_IRQ, 1, 1); #endif +#if defined(USE_EXTI2_IRQ) + _DEFINE_EXTI_IRQ_HANDLER(EXTI2_IRQ, 2, 2); +#endif + #if defined(USE_EXTI9_5_IRQ) _DEFINE_EXTI_IRQ_HANDLER(EXTI9_5_IRQ, 5, 9); #endif @@ -102,6 +106,10 @@ void stm32_exti_enable(uint32_t line, uint8_t trigger, stm32_exti_handler_t cb) _SET_EXTI_IRQ_HANDLER(EXTI1_IRQ, 1, 1, line_pos, cb); #endif +#if defined(USE_EXTI2_IRQ) + _SET_EXTI_IRQ_HANDLER(EXTI2_IRQ, 2, 2, line_pos, cb); +#endif + #if defined(USE_EXTI9_5_IRQ) _SET_EXTI_IRQ_HANDLER(EXTI9_5_IRQ, 5, 9, line_pos, cb); #endif @@ -119,6 +127,10 @@ void stm32_exti_disable(uint32_t line) _CLEAR_EXTI_IRQ_HANDLER(EXTI1_IRQ, 1, 1, line_pos); #endif +#if defined(USE_EXTI2_IRQ) + _CLEAR_EXTI_IRQ_HANDLER(EXTI2_IRQ, 2, 2, line_pos); +#endif + #if defined(USE_EXTI9_5_IRQ) _CLEAR_EXTI_IRQ_HANDLER(EXTI9_5_IRQ, 5, 9, line_pos); #endif diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 9bb3d82b6..9c320b896 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -771,17 +771,14 @@ #else #define TOUCH_RST_GPIO_PIN LL_GPIO_PIN_10 // PF.10 #endif - #define TOUCH_INT_EXTI_LINE1 EXTI_Line2 - #define TOUCH_INT_EXTI_IRQn1 EXTI2_IRQn - #define TOUCH_INT_EXTI_IRQHandler1 EXTI2_IRQHandler - #define TOUCH_INT_EXTI_PortSource EXTI_PortSourceGPIOH - #define TOUCH_INT_EXTI_PinSource1 EXTI_PinSource2 - #define TOUCH_INT_EXTI_Line LL_EXTI_LINE_2 #define TOUCH_INT_EXTI_Port LL_SYSCFG_EXTI_PORTH #define TOUCH_INT_EXTI_SysCfgLine LL_SYSCFG_EXTI_LINE2 - #define TOUCH_INT_EXTI_IRQn EXTI2_IRQn - #define TOUCH_INT_EXTI_IRQHandler EXTI2_IRQHandler + // TOUCH_INT_EXTI IRQ +#if !defined(USE_EXTI2_IRQ) + #define USE_EXTI2_IRQ + #define EXTI2_IRQ_Priority 9 +#endif #if defined(PCBX12S) #define TOUCH_PANEL_INVERTED diff --git a/radio/src/targets/horus/tp_gt911.cpp b/radio/src/targets/horus/tp_gt911.cpp index 0d5a0d03e..0ff9630c9 100644 --- a/radio/src/targets/horus/tp_gt911.cpp +++ b/radio/src/targets/horus/tp_gt911.cpp @@ -23,6 +23,7 @@ #include "stm32_hal.h" #include "stm32_i2c_driver.h" #include "stm32_gpio_driver.h" +#include "stm32_exti_driver.h" #include "hal.h" #include "tp_gt911.h" @@ -440,18 +441,14 @@ static short tapCount = 0; static TouchState internalTouchState = {}; +static void _gt911_exti_isr(void) +{ + touchEventOccured = true; +} + static void TOUCH_AF_ExtiStop(void) { - LL_EXTI_InitTypeDef extiInit; - LL_EXTI_StructInit(&extiInit); - - extiInit.Line_0_31 = TOUCH_INT_EXTI_Line; - extiInit.Mode = LL_EXTI_MODE_IT; - extiInit.Trigger = LL_EXTI_TRIGGER_RISING; - extiInit.LineCommand = DISABLE; - LL_EXTI_Init(&extiInit); - - NVIC_DisableIRQ(TOUCH_INT_EXTI_IRQn); + stm32_exti_disable(TOUCH_INT_EXTI_Line); } static void TOUCH_AF_ExtiConfig(void) @@ -459,17 +456,9 @@ static void TOUCH_AF_ExtiConfig(void) __HAL_RCC_SYSCFG_CLK_ENABLE(); LL_SYSCFG_SetEXTISource(TOUCH_INT_EXTI_Port, TOUCH_INT_EXTI_SysCfgLine); - LL_EXTI_InitTypeDef extiInit; - LL_EXTI_StructInit(&extiInit); - - extiInit.Line_0_31 = TOUCH_INT_EXTI_Line; - extiInit.Mode = LL_EXTI_MODE_IT; - extiInit.Trigger = LL_EXTI_TRIGGER_RISING; - extiInit.LineCommand = ENABLE; - LL_EXTI_Init(&extiInit); - - NVIC_SetPriority(TOUCH_INT_EXTI_IRQn, 9); - NVIC_EnableIRQ(TOUCH_INT_EXTI_IRQn); + stm32_exti_enable(TOUCH_INT_EXTI_Line, + LL_EXTI_TRIGGER_RISING, + _gt911_exti_isr); } static void TOUCH_AF_GPIOConfig(void) @@ -799,18 +788,6 @@ struct TouchState touchPanelRead() return internalTouchState; } -#if !defined(TOUCH_INT_EXTI_IRQHandler) - #error "TOUCH_INT_EXTI_IRQHandler is not defined" -#endif -extern "C" void TOUCH_INT_EXTI_IRQHandler(void) -{ - if (LL_EXTI_IsEnabledIT_0_31(TOUCH_INT_EXTI_Line) && - LL_EXTI_IsActiveFlag_0_31(TOUCH_INT_EXTI_Line)) { - touchEventOccured = true; - LL_EXTI_ClearFlag_0_31(TOUCH_INT_EXTI_Line); - } -} - bool touchPanelEventOccured() { return touchEventOccured;