您好我正在使用在“裸机”上运行的AT91SAM7X256。我已经仔细阅读了数据表以及架构手册,考虑到这一点我得出的结论是FIQ优先于IRQ,因此FIQ不应该被IRQ抢占
然而在实践中,我注意到IRQ暂停执行我的FIQ处理程序,即使我没有触及CPSR中的F位。假设FIQ不应该被暂停以服务IRQ是不正确的?
我需要做些什么来确保我的FIQ服务例程不会中断?
谢谢你
答案 0 :(得分:3)
当您输入FIQ处理程序时,ARM内核会通过设置CPSR中的“I”和“F”位来自动禁用FIQ和IRQ的进一步中断。这让您感觉没有任何东西可以抢占FIQ。但是SW可以覆盖这种行为!所以我猜你的代码的某些部分是触及CPSR并重置'I'位。因此,即使您的FIQ正在运行,IRQ中断也可能会被触发。
为了补充上面的解释,FIQ似乎特别的原因是当输入IRQ处理程序时,仅通过禁用其他IRQ来设置'I'位。 'F'位未设置,因此更多FIQ可以在不需要SW干预的情况下中断正在运行的IRQ处理程序。