arm - STM32清除中断标志的正确方法

标签 arm interrupt stm32 isr

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

ISR 已通过以下方式实现:

  1. 读取外设中的中断状态以了解是什么事件引发了中断
  2. 做某事
  3. 清除开头读取的标志。

这是清除标志的正确方法吗?不应该在 ISR 的一开始就清除标志吗?我的理解是,如果在第 2 步中第二次发生相同的外围事件,它不会引发第二个 IRQ,因此它会丢失。另一方面,如果您尽快清除该标志,第二个事件将触发中断,其在 CPU 中的状态将更改为“挂起和事件”:将发生第二个 IRQ。

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

最佳答案

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

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

关于arm - STM32清除中断标志的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50045628/

相关文章:

c++ - 如何将 ICU 库添加到 ARM 的 Qt 项目中?

visual-studio - Visual Studio 生成文件项目未在编辑器中显示错误

c - 如何注册和取消注册中断事件

c - STM32 SPI 发送

ubuntu - 在 ARM-Cortex Ubuntu 发行版上编译 i386 库

assembly - 有什么理由在 MOV pc 上使用 BX R,R 除了拇指互通之前的 ARMv7 吗?

assembly - 在 x86 软件中断期间,具体何时进行上下文切换?

embedded - TRAP 、软件中断和硬件中断之间的区别?

embedded - Cortex-M3 STM32F103 内核在闪存页删除期间是否会因为 FPEC 繁忙且无法从闪存中获取更多指令而停止?

c - 嵌入式系统上的 malloc 行为