Arm 清除STM32上中断标志的正确方法

Arm 清除STM32上中断标志的正确方法,arm,interrupt,stm32,isr,Arm,Interrupt,Stm32,Isr,我正在STM32L4上开发一个裸机项目,我从现有的代码库开始 ISR的实施方式如下: 读取外围设备中的中断状态,以了解引发中断的事件 做点什么 清除开头已读取的标志 这是清除旗帜的正确方法吗?难道不应该在ISR开始时清除这些标志吗?我的理解是,如果相同的外围事件在步骤2中再次发生,它不会引发第二次IRQ,因此会丢失。另一方面,如果您尽快清除该标志,则第二个事件将脉冲中断,其在CPU中的状态将变为“挂起和活动”:将发生第二个IRQ PS:从STM32处理器编程手册中我读到:“STM32中断是电平敏

我正在STM32L4上开发一个裸机项目,我从现有的代码库开始

ISR的实施方式如下:

  • 读取外围设备中的中断状态,以了解引发中断的事件
  • 做点什么
  • 清除开头已读取的标志
  • 这是清除旗帜的正确方法吗?难道不应该在ISR开始时清除这些标志吗?我的理解是,如果相同的外围事件在步骤2中再次发生,它不会引发第二次IRQ,因此会丢失。另一方面,如果您尽快清除该标志,则第二个事件将脉冲中断,其在CPU中的状态将变为“挂起和活动”:将发生第二个IRQ


    PS:从STM32处理器编程手册中我读到:“STM32中断是电平敏感和脉冲敏感的”

    肯定是在开始时(除非您在程序逻辑中有特殊原因),因为实际写入标志清除寄存器需要一些时间才能通过总线传播

    如果出于某种原因决定将其放在中断的末尾,则应留下一些指令,在中断例程返回之前放置屏障指令或读回寄存器,以确保清除操作已通过总线传播。否则,您可能会有一个“幻影”重复例行调用