diff --git a/firmware/target/arm/nvic-arm.h b/firmware/target/arm/nvic-arm.h index 57a16f43aa..f695279e8c 100644 --- a/firmware/target/arm/nvic-arm.h +++ b/firmware/target/arm/nvic-arm.h @@ -43,6 +43,13 @@ static inline void nvic_disable_irq(int nr) reg_var(CM_NVIC_ICER(reg)) = BIT_N(bit); } +static inline void nvic_disable_irq_sync(int nr) +{ + nvic_disable_irq(nr); + arm_dsb(); + arm_isb(); +} + static inline void nvic_set_pending_irq(int nr) { int reg = nr / 32; diff --git a/firmware/target/arm/stm32/usb-stm32h7.c b/firmware/target/arm/stm32/usb-stm32h7.c index 94611c3940..983389b54c 100644 --- a/firmware/target/arm/stm32/usb-stm32h7.c +++ b/firmware/target/arm/stm32/usb-stm32h7.c @@ -172,8 +172,7 @@ void usb_dw_target_enable_irq(void) void usb_dw_target_disable_irq(void) { - nvic_disable_irq(IRQN_USB); - arm_dsb(); + nvic_disable_irq_sync(IRQN_USB); } void usb_dw_target_clear_irq(void)