在进入中断处理程序之前清除中断标志会发生什么?

时间:2020-07-10 20:14:29

标签: arm stm32 interrupt interrupt-handling

比方说,当我在ISR中针对另一个具有相同或更高优先级的中断(中断2)时,发生了中断(中断1)。然后在退出当前ISR之前,先清除中断1的中断标志。是否仍将执行中断1的中断处理程序,否则将忽略中断1?

对于上下文,我使用的是STM32微控制器。

谢谢

1 个答案:

答案 0 :(得分:-2)

根据过去其他CPU的经验,您松开了中断。

在这种情况下,清除中断1标志:

  • 只需读取中断1标志位并将其临时存储
  • 清除中断标志(在某些读取CPU的中断标志中,会自动将其清除)
  • 在中断2的末尾检查存储的位
    • 如果未设置,则退出中断2例程
    • 如果已设置并且两个中断都具有相同的优先级(或者没关系!):
      • 仅跳转/调用另一个中断1例程(在中断2例程执行中“保持”)
    • 如果已设置并且中断1的优先级不同,那么您确实必须为其分配适当的优先级:
      • 然后变得困难,这里有一些选择:
        • 一旦我强迫CPU触发另一个未使用的具有相同优先级的中断3(如中断1),则使用中断3执行“中断1”例程
        • 使用上述技巧和更多功能,根据需要尽可能地在代码中构建中断优先级处理。

PS:这应该在处理器的手册中进行说明,清除中断位是否会使其执行松动-多数是,中断位只是一个“中断待处理”位。有时很难找到描述,但是日常工作。