Added UART interrupt priority hack

This commit is contained in:
Benjamin Vedder 2023-09-24 20:19:12 +02:00
parent 3d8df40d7d
commit aac50698af
3 changed files with 18 additions and 12 deletions

View File

@ -427,41 +427,43 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
if (config == NULL) if (config == NULL)
config = &default_config; config = &default_config;
uint32_t prio = config->speed > 200000 ? 4 : 7;
if (sdp->state == SD_STOP) { if (sdp->state == SD_STOP) {
#if STM32_SERIAL_USE_USART1 #if STM32_SERIAL_USE_USART1
if (&SD1 == sdp) { if (&SD1 == sdp) {
rccEnableUSART1(FALSE); rccEnableUSART1(FALSE);
nvicEnableVector(STM32_USART1_NUMBER, STM32_SERIAL_USART1_PRIORITY); nvicEnableVector(STM32_USART1_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_USART2 #if STM32_SERIAL_USE_USART2
if (&SD2 == sdp) { if (&SD2 == sdp) {
rccEnableUSART2(FALSE); rccEnableUSART2(FALSE);
nvicEnableVector(STM32_USART2_NUMBER, STM32_SERIAL_USART2_PRIORITY); nvicEnableVector(STM32_USART2_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_USART3 #if STM32_SERIAL_USE_USART3
if (&SD3 == sdp) { if (&SD3 == sdp) {
rccEnableUSART3(FALSE); rccEnableUSART3(FALSE);
nvicEnableVector(STM32_USART3_NUMBER, STM32_SERIAL_USART3_PRIORITY); nvicEnableVector(STM32_USART3_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_UART4 #if STM32_SERIAL_USE_UART4
if (&SD4 == sdp) { if (&SD4 == sdp) {
rccEnableUART4(FALSE); rccEnableUART4(FALSE);
nvicEnableVector(STM32_UART4_NUMBER, STM32_SERIAL_UART4_PRIORITY); nvicEnableVector(STM32_UART4_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_UART5 #if STM32_SERIAL_USE_UART5
if (&SD5 == sdp) { if (&SD5 == sdp) {
rccEnableUART5(FALSE); rccEnableUART5(FALSE);
nvicEnableVector(STM32_UART5_NUMBER, STM32_SERIAL_UART5_PRIORITY); nvicEnableVector(STM32_UART5_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_USART6 #if STM32_SERIAL_USE_USART6
if (&SD6 == sdp) { if (&SD6 == sdp) {
rccEnableUSART6(FALSE); rccEnableUSART6(FALSE);
nvicEnableVector(STM32_USART6_NUMBER, STM32_SERIAL_USART6_PRIORITY); nvicEnableVector(STM32_USART6_NUMBER, prio);
} }
#endif #endif
} }

View File

@ -423,41 +423,43 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
if (config == NULL) if (config == NULL)
config = &default_config; config = &default_config;
uint32_t prio = config->speed > 200000 ? 4 : 7;
if (sdp->state == SD_STOP) { if (sdp->state == SD_STOP) {
#if STM32_SERIAL_USE_USART1 #if STM32_SERIAL_USE_USART1
if (&SD1 == sdp) { if (&SD1 == sdp) {
rccEnableUSART1(FALSE); rccEnableUSART1(FALSE);
nvicEnableVector(STM32_USART1_NUMBER, STM32_SERIAL_USART1_PRIORITY); nvicEnableVector(STM32_USART1_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_USART2 #if STM32_SERIAL_USE_USART2
if (&SD2 == sdp) { if (&SD2 == sdp) {
rccEnableUSART2(FALSE); rccEnableUSART2(FALSE);
nvicEnableVector(STM32_USART2_NUMBER, STM32_SERIAL_USART2_PRIORITY); nvicEnableVector(STM32_USART2_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_USART3 #if STM32_SERIAL_USE_USART3
if (&SD3 == sdp) { if (&SD3 == sdp) {
rccEnableUSART3(FALSE); rccEnableUSART3(FALSE);
nvicEnableVector(STM32_USART3_NUMBER, STM32_SERIAL_USART3_PRIORITY); nvicEnableVector(STM32_USART3_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_UART4 #if STM32_SERIAL_USE_UART4
if (&SD4 == sdp) { if (&SD4 == sdp) {
rccEnableUART4(FALSE); rccEnableUART4(FALSE);
nvicEnableVector(STM32_UART4_NUMBER, STM32_SERIAL_UART4_PRIORITY); nvicEnableVector(STM32_UART4_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_UART5 #if STM32_SERIAL_USE_UART5
if (&SD5 == sdp) { if (&SD5 == sdp) {
rccEnableUART5(FALSE); rccEnableUART5(FALSE);
nvicEnableVector(STM32_UART5_NUMBER, STM32_SERIAL_UART5_PRIORITY); nvicEnableVector(STM32_UART5_NUMBER, prio);
} }
#endif #endif
#if STM32_SERIAL_USE_USART6 #if STM32_SERIAL_USE_USART6
if (&SD6 == sdp) { if (&SD6 == sdp) {
rccEnableUSART6(FALSE); rccEnableUSART6(FALSE);
nvicEnableVector(STM32_USART6_NUMBER, STM32_SERIAL_USART6_PRIORITY); nvicEnableVector(STM32_USART6_NUMBER, prio);
} }
#endif #endif
} }

View File

@ -294,6 +294,8 @@
#define STM32_SERIAL_USE_UART4 TRUE #define STM32_SERIAL_USE_UART4 TRUE
#define STM32_SERIAL_USE_UART5 TRUE #define STM32_SERIAL_USE_UART5 TRUE
#define STM32_SERIAL_USE_USART6 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_USART1_PRIORITY 7
#define STM32_SERIAL_USART2_PRIORITY 7 #define STM32_SERIAL_USART2_PRIORITY 7
#define STM32_SERIAL_USART3_PRIORITY 7 #define STM32_SERIAL_USART3_PRIORITY 7