我在STM32L4上开发了一个裸机项目,我从现有的代码库开始。
ISR已通过以下方式实施:
这是清除旗帜的正确方法吗?不应该在ISR的最开始清除标志吗?我的理解是,如果在步骤2中第二次发生相同的外围事件,它将不会引发第二个IRQ,因此它将丢失。另一方面,如果您尽快清除该标志,则第二个事件将使脉冲中断,其中CPU中的状态将变为"挂起并激活":将发生第二个IRQ。
PS:从STM32处理器编程手册我读到:" STM32中断既是电平敏感的又是脉冲敏感的"。
答案 0 :(得分:4)
绝对在开始时(除非你在程序逻辑中有特殊原因)因为需要一些时间来实际写入标志清除寄存器以通过总线传播。
如果由于某种原因决定将其置于中断结束时,则应在中断例程返回之前保留一些指令,放置屏障指令或读回寄存器,以确保清除操作已在总线上传播。否则,您可能会进行“幻影”重复例程调用。