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

4

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

中断服务程序(ISR)的实现方式如下:

  1. 在外设中读取中断状态,以了解是什么事件引起了中断
  2. 进行一些操作
  3. 清除一开始读取的标志位。

这是清除标志位的正确方式吗?标志位不应该在ISR的最开始被清除吗?我的理解是,如果同一个外设事件在第2步期间再次发生,则不会触发第二个IRQ,因此它将丢失。另一方面,如果尽快清除标志位,这个第二个事件将脉冲中断,其在CPU中的状态将变为“挂起和活动”:第二个IRQ将发生。

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

1个回答

6

通常情况下(除非程序逻辑有特殊要求),清除标志寄存器需要一些时间才能通过总线传播,因此建议将其放在中断开始部分。

如果你因某些原因决定将其放在中断末尾,则应留出一些指令,放置障碍指令或在中断例程返回之前读取寄存器,以确保清除操作已经通过总线传播。否则,可能会出现"幽灵"重复例程调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接