ARM7TDMI IRQ和FIQ优先级

3

你好,我目前正在使用裸机方式运行的AT91SAM7X256。我已经仔细阅读了数据手册和架构手册,在此基础上得出结论:FIQ优先级高于IRQ,因此IRQ不应该抢占FIQ。

然而在实践中,我注意到IRQ挂起了我的FIQ处理程序的执行,即使我没有触碰CPSR中的F位也是如此。那么假设FIQ不会被中断来服务IRQ是错误的吗?

我需要做什么才能确保我的FIQ服务例程不被中断呢?

谢谢!

1个回答

3
当您进入FIQ处理程序时,ARM核心会自动禁用进一步的中断,包括FIQ和IRQ,通过在CPSR中设置'I'和'F'位。这让您感觉到没有什么可以抢占FIQ。但是,软件可以覆盖此行为!所以我猜您的代码的某些部分正在触及CPSR并重置'I'位。因此,即使您的FIQ正在运行,IRQ中断也可能被触发。
补充上述说明,FIQ似乎很特殊的原因是当进入IRQ处理程序时,只有'I'位被设置,从而仅禁用进一步的IRQ。 'F'位未设置,因此无需SW干预,进一步的FIQ可以中断运行中的IRQ处理程序。

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