From aac50698af231cb6350707485e64f6d36ebc785d Mon Sep 17 00:00:00 2001 From: Benjamin Vedder Date: Sun, 24 Sep 2023 20:19:12 +0200 Subject: [PATCH] Added UART interrupt priority hack --- .../os/hal/ports/STM32/LLD/USARTv1/serial_lld.c | 14 ++++++++------ .../os/hal/ports/STM32/LLD/USARTv2/serial_lld.c | 14 ++++++++------ hwconf/mcuconf.h | 2 ++ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c b/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c index 69b725d1..efb9a068 100644 --- a/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c +++ b/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c @@ -427,41 +427,43 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { if (config == NULL) config = &default_config; + uint32_t prio = config->speed > 200000 ? 4 : 7; + if (sdp->state == SD_STOP) { #if STM32_SERIAL_USE_USART1 if (&SD1 == sdp) { rccEnableUSART1(FALSE); - nvicEnableVector(STM32_USART1_NUMBER, STM32_SERIAL_USART1_PRIORITY); + nvicEnableVector(STM32_USART1_NUMBER, prio); } #endif #if STM32_SERIAL_USE_USART2 if (&SD2 == sdp) { rccEnableUSART2(FALSE); - nvicEnableVector(STM32_USART2_NUMBER, STM32_SERIAL_USART2_PRIORITY); + nvicEnableVector(STM32_USART2_NUMBER, prio); } #endif #if STM32_SERIAL_USE_USART3 if (&SD3 == sdp) { rccEnableUSART3(FALSE); - nvicEnableVector(STM32_USART3_NUMBER, STM32_SERIAL_USART3_PRIORITY); + nvicEnableVector(STM32_USART3_NUMBER, prio); } #endif #if STM32_SERIAL_USE_UART4 if (&SD4 == sdp) { rccEnableUART4(FALSE); - nvicEnableVector(STM32_UART4_NUMBER, STM32_SERIAL_UART4_PRIORITY); + nvicEnableVector(STM32_UART4_NUMBER, prio); } #endif #if STM32_SERIAL_USE_UART5 if (&SD5 == sdp) { rccEnableUART5(FALSE); - nvicEnableVector(STM32_UART5_NUMBER, STM32_SERIAL_UART5_PRIORITY); + nvicEnableVector(STM32_UART5_NUMBER, prio); } #endif #if STM32_SERIAL_USE_USART6 if (&SD6 == sdp) { rccEnableUSART6(FALSE); - nvicEnableVector(STM32_USART6_NUMBER, STM32_SERIAL_USART6_PRIORITY); + nvicEnableVector(STM32_USART6_NUMBER, prio); } #endif } diff --git a/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv2/serial_lld.c b/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv2/serial_lld.c index e78fe150..58bdd4fd 100644 --- a/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv2/serial_lld.c +++ b/ChibiOS_3.0.5/os/hal/ports/STM32/LLD/USARTv2/serial_lld.c @@ -423,41 +423,43 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { if (config == NULL) config = &default_config; + uint32_t prio = config->speed > 200000 ? 4 : 7; + if (sdp->state == SD_STOP) { #if STM32_SERIAL_USE_USART1 if (&SD1 == sdp) { rccEnableUSART1(FALSE); - nvicEnableVector(STM32_USART1_NUMBER, STM32_SERIAL_USART1_PRIORITY); + nvicEnableVector(STM32_USART1_NUMBER, prio); } #endif #if STM32_SERIAL_USE_USART2 if (&SD2 == sdp) { rccEnableUSART2(FALSE); - nvicEnableVector(STM32_USART2_NUMBER, STM32_SERIAL_USART2_PRIORITY); + nvicEnableVector(STM32_USART2_NUMBER, prio); } #endif #if STM32_SERIAL_USE_USART3 if (&SD3 == sdp) { rccEnableUSART3(FALSE); - nvicEnableVector(STM32_USART3_NUMBER, STM32_SERIAL_USART3_PRIORITY); + nvicEnableVector(STM32_USART3_NUMBER, prio); } #endif #if STM32_SERIAL_USE_UART4 if (&SD4 == sdp) { rccEnableUART4(FALSE); - nvicEnableVector(STM32_UART4_NUMBER, STM32_SERIAL_UART4_PRIORITY); + nvicEnableVector(STM32_UART4_NUMBER, prio); } #endif #if STM32_SERIAL_USE_UART5 if (&SD5 == sdp) { rccEnableUART5(FALSE); - nvicEnableVector(STM32_UART5_NUMBER, STM32_SERIAL_UART5_PRIORITY); + nvicEnableVector(STM32_UART5_NUMBER, prio); } #endif #if STM32_SERIAL_USE_USART6 if (&SD6 == sdp) { rccEnableUSART6(FALSE); - nvicEnableVector(STM32_USART6_NUMBER, STM32_SERIAL_USART6_PRIORITY); + nvicEnableVector(STM32_USART6_NUMBER, prio); } #endif } diff --git a/hwconf/mcuconf.h b/hwconf/mcuconf.h index 74eb1c7b..d1b1782c 100644 --- a/hwconf/mcuconf.h +++ b/hwconf/mcuconf.h @@ -294,6 +294,8 @@ #define STM32_SERIAL_USE_UART4 TRUE #define STM32_SERIAL_USE_UART5 TRUE #define STM32_SERIAL_USE_USART6 TRUE +// NOTE: These are ignored as there is a hack in the chibios UART driver to increase these +// based on the baud rate. #define STM32_SERIAL_USART1_PRIORITY 7 #define STM32_SERIAL_USART2_PRIORITY 7 #define STM32_SERIAL_USART3_PRIORITY 7