From cfa094abde20a24570f057727353d49b19902e69 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Tue, 4 Aug 2026 21:40:17 -0700 Subject: [PATCH] spi: prioritize TX completion --- board/drivers/interrupts.h | 1 + board/drivers/spi.h | 5 +++-- board/stm32h7/llspi.h | 3 +++ board/sys/critical.h | 1 + board/sys/sys.h | 4 ++-- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/board/drivers/interrupts.h b/board/drivers/interrupts.h index c404e43d22f..e458e44856a 100644 --- a/board/drivers/interrupts.h +++ b/board/drivers/interrupts.h @@ -74,6 +74,7 @@ void init_interrupts(bool check_rate_limit){ for(uint16_t i=0U; iCCR), 83U, 0xFFFFFFFFU); register_set(&(DMA2_Stream2->CR), (DMA_SxCR_MINC | DMA_SxCR_TCIE), 0x1E077EFEU); diff --git a/board/sys/critical.h b/board/sys/critical.h index 70c143f7012..8088c6e88de 100644 --- a/board/sys/critical.h +++ b/board/sys/critical.h @@ -7,6 +7,7 @@ static volatile bool interrupts_enabled = false; void enable_interrupts(void) { interrupts_enabled = true; + __set_BASEPRI(0U); __enable_irq(); } diff --git a/board/sys/sys.h b/board/sys/sys.h index fe5527a0c72..a32dddfb0cf 100644 --- a/board/sys/sys.h +++ b/board/sys/sys.h @@ -9,7 +9,7 @@ extern uint8_t global_critical_depth; #ifndef ENTER_CRITICAL #define ENTER_CRITICAL() \ - __disable_irq(); \ + __set_BASEPRI(1U << (8U - __NVIC_PRIO_BITS)); \ global_critical_depth += 1U; #endif @@ -17,7 +17,7 @@ extern uint8_t global_critical_depth; #define EXIT_CRITICAL() \ global_critical_depth -= 1U; \ if ((global_critical_depth == 0U) && interrupts_enabled) { \ - __enable_irq(); \ + __set_BASEPRI(0U); \ } #endif