您好,我目前正在使用在“裸机”上运行的AT91SAM7X256。我已经仔细阅读了数据手册和体系结构手册,并牢记以下结论:FIQ的优先级高于IRQ,因此FIQ不应被IRQ抢占
但是实际上,我注意到IRQ暂停了我的FIQ处理程序的执行,即使我没有触及CPSR中的F位。假设不应暂停FIQ以服务IRQ是不正确的吗?
我该怎么做才能确保FIQ服务例程不会被中断?
谢谢
最佳答案
当您输入FIQ处理程序时,ARM内核会通过将CPSR中的“I”和“F”位置1来自动禁用其他中断,包括FIQ和IRQ。这使您感觉没有什么可以抢占FIQ。但是,SW可以覆盖此行为!因此,我猜您的代码的某些部分正在触及CPSR并重置“I”位。因此,即使您的FIQ正在运行,也可能会触发IRQ中断。
为了补充上面的解释,FIQ看起来很特别的原因是,当输入IRQ处理程序时,仅通过禁用其他IRQ来仅在其中设置“I”位。未设置“F”位,因此其他FIQ可以中断正在运行的IRQ处理程序,而无需软件干预。