From 4b2c30db3c6c1f3522795d5626f189b0f4f58cc8 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 14 Oct 2022 11:14:29 +0200 Subject: [PATCH] Finally removed StdPeriph EXTI driver --- .../targets/common/arm/stm32/CMakeLists.txt | 3 - .../arm/stm32/bootloader/CMakeLists.txt | 44 +------------ .../common/arm/stm32/f2/CMakeLists.txt | 33 +++++----- .../common/arm/stm32/f4/CMakeLists.txt | 42 +++++++------ radio/src/targets/horus/hal.h | 22 ++++--- radio/src/targets/horus/telemetry_driver.cpp | 63 +++++++------------ 6 files changed, 80 insertions(+), 127 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/CMakeLists.txt b/radio/src/targets/common/arm/stm32/CMakeLists.txt index e5ca4ea45..fa03900a1 100644 --- a/radio/src/targets/common/arm/stm32/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/CMakeLists.txt @@ -84,9 +84,6 @@ endif() set(FIRMWARE_SRC ${FIRMWARE_SRC} syscalls.c) -foreach(FILE ${STM32LIB_SRC}) - set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32LIB_DIR}/${FILE}) -endforeach() foreach(FILE ${STM32USB_SRC}) set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32USB_DIR}/${FILE}) diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index f903cb84e..fd6382395 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -1,54 +1,16 @@ -# TODO if the files order is different (these 2 SRC sections exchanged), the bootloader hangs for 20s in USB init. Why? set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) if(CPU_TYPE_FULL STREQUAL STM32F429xI) - set(BOOTLOADER_SRC - ${BOOTLOADER_SRC} - ../f4/system_stm32f4xx.c + set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../../../../../targets/${TARGET_DIR}/startup_stm32f42_43xxx.s - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_ltdc.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma2d.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/misc.c ) elseif(CPU_TYPE_FULL STREQUAL STM32F407xE) - set(BOOTLOADER_SRC - ${BOOTLOADER_SRC} - ../f4/system_stm32f4xx.c + set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../../../../../targets/${TARGET_DIR}/startup_stm32f40_41xxx.s - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c - ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/misc.c ) else() - set(BOOTLOADER_SRC - ${BOOTLOADER_SRC} - ../f2/system_stm32f2xx.c - ../../../../../${STM32LIB_DIR}/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c - ../../../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/misc.c - ) + # startup file is already included from CMSIS in F2 CMakeLists.txt endif() set(BOOTLOADER_SRC diff --git a/radio/src/targets/common/arm/stm32/f2/CMakeLists.txt b/radio/src/targets/common/arm/stm32/f2/CMakeLists.txt index ddf628bc3..803307545 100644 --- a/radio/src/targets/common/arm/stm32/f2/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/f2/CMakeLists.txt @@ -37,23 +37,26 @@ include_directories(${STM32LIB_DIR}/CMSIS/Include) add_definitions(-DSTM32F2) -set(STM32LIB_SRC - ${STM32LIB_SRC} - CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s - STM32F2xx_StdPeriph_Driver/src/misc.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c - STM32F2xx_StdPeriph_Driver/src/stm32f2xx_adc.c +set(STM32_STDPERIPH_DIR ${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver) + +add_library(stm32_stdperiph OBJECT EXCLUDE_FROM_ALL + ${STM32LIB_DIR}/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s + ${STM32_STDPERIPH_DIR}/src/misc.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_gpio.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_dbgmcu.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_rcc.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_syscfg.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_spi.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_dma.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_rtc.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_pwr.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_usart.c + ${STM32_STDPERIPH_DIR}/src/stm32f2xx_adc.c ) +set(FIRMWARE_SRC ${FIRMWARE_SRC} $) +set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $) + if(NOT NATIVE_BUILD) # # FreeRTOS port specific include diff --git a/radio/src/targets/common/arm/stm32/f4/CMakeLists.txt b/radio/src/targets/common/arm/stm32/f4/CMakeLists.txt index 11de2987a..762939c2c 100644 --- a/radio/src/targets/common/arm/stm32/f4/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/f4/CMakeLists.txt @@ -37,22 +37,31 @@ include_directories(${STM32LIB_DIR}/CMSIS/Include) add_definitions(-DSTM32F4) -set(STM32LIB_SRC - ${STM32LIB_SRC} - STM32F4xx_StdPeriph_Driver/src/misc.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c - STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c +set(STM32_STDPERIPH_DIR ${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver) + +add_library(stm32_stdperiph OBJECT EXCLUDE_FROM_ALL + targets/common/arm/stm32/f4/system_stm32f4xx.c + ${STM32_STDPERIPH_DIR}/src/misc.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_gpio.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_dbgmcu.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_rcc.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_syscfg.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_spi.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_dma.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_rtc.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_pwr.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_usart.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_adc.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_fmc.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_ltdc.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_dma.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_dma2d.c + ${STM32_STDPERIPH_DIR}/src/stm32f4xx_sdio.c ) +set(FIRMWARE_SRC ${FIRMWARE_SRC} $) +set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $) + if(NOT NATIVE_BUILD) # # FreeRTOS port specific include @@ -80,8 +89,5 @@ if(NOT NATIVE_BUILD) # # System and FreeRTOS port files # - set(FIRMWARE_SRC ${FIRMWARE_SRC} - $ - targets/common/arm/stm32/f4/system_stm32f4xx.c - ) + set(FIRMWARE_SRC ${FIRMWARE_SRC} $) endif() diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 02cc65aad..d38a37a0a 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -499,15 +499,6 @@ #define TELEMETRY_GPIO_PinSource_RX GPIO_PinSource6 #define TELEMETRY_GPIO_AF GPIO_AF_USART2 #define TELEMETRY_USART USART2 -#define TELEMETRY_EXTI_PortSource EXTI_PortSourceGPIOD -#define TELEMETRY_EXTI_PinSource EXTI_PinSource6 -#define TELEMETRY_EXTI_LINE EXTI_Line6 -#define TELEMETRY_EXTI_IRQn EXTI9_5_IRQn -#define TELEMETRY_EXTI_IRQHandler EXTI9_5_IRQHandler -#define TELEMETRY_EXTI_TRIGGER EXTI_Trigger_Rising -#define TELEMETRY_TIMER TIM11 -#define TELEMETRY_TIMER_IRQn TIM1_TRG_COM_TIM11_IRQn -#define TELEMETRY_TIMER_IRQHandler TIM1_TRG_COM_TIM11_IRQHandler #if defined(PCBX12S) #define TELEMETRY_DMA_Stream_RX DMA1_Stream5 #define TELEMETRY_DMA_Channel_RX DMA_Channel_4 @@ -519,6 +510,19 @@ #define TELEMETRY_DMA_TX_FLAG_TC DMA_IT_TCIF6 #define TELEMETRY_USART_IRQHandler USART2_IRQHandler #define TELEMETRY_USART_IRQn USART2_IRQn +#define TELEMETRY_EXTI_PORT LL_SYSCFG_EXTI_PORTD +#define TELEMETRY_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE6 +#define TELEMETRY_EXTI_LINE LL_EXTI_LINE_6 +#define TELEMETRY_EXTI_TRIGGER LL_EXTI_TRIGGER_RISING +// TELEMETRY_EXTI IRQ +#if !defined(USE_EXTI9_5_IRQ) + #define USE_EXTI9_5_IRQ + #define EXTI9_5_IRQ_Priority 5 +#endif + +#define TELEMETRY_TIMER TIM11 +#define TELEMETRY_TIMER_IRQn TIM1_TRG_COM_TIM11_IRQn +#define TELEMETRY_TIMER_IRQHandler TIM1_TRG_COM_TIM11_IRQHandler // USB #define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA diff --git a/radio/src/targets/horus/telemetry_driver.cpp b/radio/src/targets/horus/telemetry_driver.cpp index ac249ce9c..7bafd09ae 100644 --- a/radio/src/targets/horus/telemetry_driver.cpp +++ b/radio/src/targets/horus/telemetry_driver.cpp @@ -19,10 +19,12 @@ * GNU General Public License for more details. */ +#include "stm32_hal_ll.h" +#include "stm32_exti_driver.h" +#include "aux_serial_driver.h" + #include "opentx.h" -#include "fifo.h" -#include "dmafifo.h" #if defined(GHOST) #include "telemetry/ghost.h" @@ -157,19 +159,24 @@ static uint8_t rxByte; static uint16_t bitLength; static uint16_t probeTimeFromStartBit; +static void do_telemetry_exti() +{ + if (rxBitCount == 0) { + + TELEMETRY_TIMER->ARR = probeTimeFromStartBit; // 1,5 cycle from start at 57600bps + TELEMETRY_TIMER->CR1 |= TIM_CR1_CEN; + + // disable start bit interrupt + EXTI->IMR &= ~EXTI_IMR_MR6; + } +} + void telemetryPortInvertedInit(uint32_t baudrate) { if (baudrate == 0) { - NVIC_DisableIRQ(TELEMETRY_EXTI_IRQn); - NVIC_DisableIRQ(TELEMETRY_TIMER_IRQn); - EXTI_InitTypeDef EXTI_InitStructure; - EXTI_StructInit(&EXTI_InitStructure); - EXTI_InitStructure.EXTI_Line = TELEMETRY_EXTI_LINE; - EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStructure.EXTI_Trigger = TELEMETRY_EXTI_TRIGGER; - EXTI_InitStructure.EXTI_LineCmd = DISABLE; - EXTI_Init(&EXTI_InitStructure); + stm32_exti_disable(TELEMETRY_EXTI_LINE); + NVIC_DisableIRQ(TELEMETRY_TIMER_IRQn); return; } @@ -215,19 +222,10 @@ void telemetryPortInvertedInit(uint32_t baudrate) telemetryInitDirPin(); // Connect EXTI line to TELEMETRY RX pin - SYSCFG_EXTILineConfig(TELEMETRY_EXTI_PortSource, TELEMETRY_EXTI_PinSource); + LL_SYSCFG_SetEXTISource(TELEMETRY_EXTI_PORT, TELEMETRY_EXTI_SYS_LINE); // Configure EXTI for raising edge (start bit) - EXTI_InitTypeDef EXTI_InitStructure; - EXTI_StructInit(&EXTI_InitStructure); - EXTI_InitStructure.EXTI_Line = TELEMETRY_EXTI_LINE; - EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStructure.EXTI_Trigger = TELEMETRY_EXTI_TRIGGER; - EXTI_InitStructure.EXTI_LineCmd = ENABLE; - EXTI_Init(&EXTI_InitStructure); - - NVIC_SetPriority(TELEMETRY_EXTI_IRQn, 0); - NVIC_EnableIRQ(TELEMETRY_EXTI_IRQn); + stm32_exti_enable(TELEMETRY_EXTI_LINE, TELEMETRY_EXTI_TRIGGER, do_telemetry_exti); } void telemetryPortInvertedRxBit() @@ -265,7 +263,7 @@ void telemetryPortSetDirectionOutput() TELEMETRY_USART->BRR = BRR_400K; } #endif - TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN; // output enable + GPIO_SetBits(TELEMETRY_DIR_GPIO, TELEMETRY_DIR_GPIO_PIN); TELEMETRY_USART->CR1 &= ~USART_CR1_RE; // turn off receiver } @@ -282,7 +280,7 @@ void telemetryPortSetDirectionInput() TELEMETRY_USART->BRR = BRR_115K; } #endif - TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN; // output disable + GPIO_ResetBits(TELEMETRY_DIR_GPIO, TELEMETRY_DIR_GPIO_PIN); TELEMETRY_USART->CR1 |= USART_CR1_RE; // turn on receiver } @@ -405,23 +403,6 @@ extern "C" void TELEMETRY_USART_IRQHandler(void) } } -extern "C" void TELEMETRY_EXTI_IRQHandler(void) -{ - if (EXTI_GetITStatus(TELEMETRY_EXTI_LINE) != RESET) { - - if (rxBitCount == 0) { - - TELEMETRY_TIMER->ARR = probeTimeFromStartBit; // 1,5 cycle from start at 57600bps - TELEMETRY_TIMER->CR1 |= TIM_CR1_CEN; - - // disable start bit interrupt - EXTI->IMR &= ~EXTI_IMR_MR6; - } - - EXTI_ClearITPendingBit(TELEMETRY_EXTI_LINE); - } -} - extern "C" void TELEMETRY_TIMER_IRQHandler() { TELEMETRY_TIMER->SR &= ~TIM_SR_UIF;