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