diff --git a/Marlin/src/HAL/HAL_STM32F7xx/HAL.h b/Marlin/src/HAL/HAL_STM32F7xx/HAL.h index 230c53d302e7..73eee3843bf7 100644 --- a/Marlin/src/HAL/HAL_STM32F7xx/HAL.h +++ b/Marlin/src/HAL/HAL_STM32F7xx/HAL.h @@ -122,6 +122,8 @@ #define ISRS_ENABLED() (!__get_PRIMASK()) #define ENABLE_ISRS() __enable_irq() #define DISABLE_ISRS() __disable_irq() +#define cli() __disable_irq() +#define sei() __enable_irq() // On AVR this is in math.h? #define square(x) ((x)*(x)) @@ -161,12 +163,6 @@ extern uint16_t HAL_adc_result; // Public functions // -------------------------------------------------------------------------- -// Disable interrupts -#define cli() do { DISABLE_TEMPERATURE_INTERRUPT(); DISABLE_STEPPER_DRIVER_INTERRUPT(); } while(0) - -// Enable interrupts -#define sei() do { ENABLE_TEMPERATURE_INTERRUPT(); ENABLE_STEPPER_DRIVER_INTERRUPT(); } while(0) - // Memory related #define __bss_end __bss_end__ diff --git a/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.cpp b/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.cpp index 011d182438bd..939f1705c2d8 100644 --- a/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.cpp +++ b/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.cpp @@ -100,17 +100,14 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { } void HAL_timer_enable_interrupt(const uint8_t timer_num) { - switch (timer_num) { - case STEP_TIMER_NUM: HAL_NVIC_EnableIRQ(STEP_TIMER_IRQ_ID); break; - case TEMP_TIMER_NUM: HAL_NVIC_EnableIRQ(TEMP_TIMER_IRQ_ID); break; - } + const IRQn_Type IRQ_Id = IRQn_Type(getTimerIrq(TimerHandle[timer_num].timer)); + HAL_NVIC_EnableIRQ(IRQ_Id); } void HAL_timer_disable_interrupt(const uint8_t timer_num) { - switch (timer_num) { - case STEP_TIMER_NUM: HAL_NVIC_DisableIRQ(STEP_TIMER_IRQ_ID); break; - case TEMP_TIMER_NUM: HAL_NVIC_DisableIRQ(TEMP_TIMER_IRQ_ID); break; - } + const IRQn_Type IRQ_Id = IRQn_Type(getTimerIrq(TimerHandle[timer_num].timer)); + HAL_NVIC_DisableIRQ(IRQ_Id); + // We NEED memory barriers to ensure Interrupts are actually disabled! // ( https://dzone.com/articles/nvic-disabling-interrupts-on-arm-cortex-m-and-the ) __DSB(); @@ -118,11 +115,8 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num) { } bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { - switch (timer_num) { - case STEP_TIMER_NUM: return NVIC->ISER[(uint32_t)((int32_t)STEP_TIMER_IRQ_ID) >> 5] & (uint32_t)(1 << ((uint32_t)((int32_t)STEP_TIMER_IRQ_ID) & (uint32_t)0x1F)); - case TEMP_TIMER_NUM: return NVIC->ISER[(uint32_t)((int32_t)TEMP_TIMER_IRQ_ID) >> 5] & (uint32_t)(1 << ((uint32_t)((int32_t)TEMP_TIMER_IRQ_ID) & (uint32_t)0x1F)); - } - return false; + const uint32_t IRQ_Id = getTimerIrq(TimerHandle[timer_num].timer); + return NVIC->ISER[IRQ_Id >> 5] & _BV32(IRQ_Id & 0x1F); } #endif STM32F7xx diff --git a/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.h b/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.h index 280ae1afab60..f15856029662 100644 --- a/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.h +++ b/Marlin/src/HAL/HAL_STM32F7xx/HAL_timers_STM32F7.h @@ -60,6 +60,9 @@ #define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) #define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define TEMP_ISR_ENABLED() HAL_timer_interrupt_enabled(TEMP_TIMER_NUM) + extern void Step_Handler(stimer_t *htim); extern void Temp_Handler(stimer_t *htim); #define HAL_STEP_TIMER_ISR void Step_Handler(stimer_t *htim)