有人知道如何启用ARM FIQ吗?

5
有人知道如何启用ARM FIQ吗?

介意解释一下这些首字母缩略词吗? - Dirk Vollmar
2个回答

8
除了在监管模式下启用或禁用IRQ/FIQ之外,您无需在ARM上进行任何特殊设置即可使用它,除非系统(ARM芯片正在运行的系统)已经在硬件上禁用它(根据您的评论,这不是情况,因为您看到FIQ输入引脚驱动正确)。
对于那些不了解缩写的人来说,FIQ只是列表中的最后一个中断向量,这意味着它不像其他中断一样仅限于分支指令。这意味着它可以比其他IRQ处理程序更快地执行。
正常的IRQ受到分支指令的限制,因为它们必须确保其代码适合单个字。FIQ由于不会覆盖任何其他IRQ向量,因此可以直接运行代码而无需分支指令(因此是“快速”的)。
FIQ输入线只是一种让外部元素将ARM芯片切换到FIQ模式并开始执行正确异常的方法。除了CPSR之外,ARM本身没有任何防止发生这种情况的措施。
要在监管模式下启用FIQ:
MRS r1, cpsr         ; get the cpsr.
BIC r1, r1, #0x40    ; enable FIQ (ORR to disable).
MSR cpsr_c, r1       ; copy it back, control field bit update.

对于普通的IRQ,可以采用类似的方法,但使用#0x80而不是#0x40。


我是硬件工程师。我运行了模拟,并看到 ARM FIQ 在 ARM 边界处被激活,但 ARM 没有对其作出响应。 我猜可能 CPSR F 位被禁用了? - stone
@stone,请在答案中执行MRS指令,查看b6(0x40)的设置情况。它可能被禁用了。 - paxdiablo
1
如果在快速中断期间需要堆栈,则需要设置 FIQ 堆栈(ARM 中有 6 个单独的堆栈)。 - old_timer
3
你忘了提到因为有更多分段寄存器,所以FIQ速度更快。IRQ和FIQ有各自的模式,因此使用监管模式几乎没有意义。IRQ只有sp/r13和lr/r14两个分段,而FIQ有r8-r12、lr和sp。 此外,中断通常由CPSR I和F位以及硬件寄存器一起切换,这依赖于芯片/SoC的设计。一个简单的例子是Gameboy Advance。 - Mads Elvheim
评论和答案同样重要。另外需要注意的是,FIQ 位于向量表的末尾。为了获得最佳性能,您可以将 FIQ 处理程序重定位到那里以避免分支。启用 是一个多义词。在严格意义上,答案是正确的。 - artless noise

1
芯片制造商可以使用Trustzone扩展关闭FIQ对您的访问权限。
Trustzone创建了一个安全世界和一个普通世界。安全世界有自己的监管者、用户和内存空间。其想法是将安全操作路由到芯片内部,即使您扫描总线上的引脚,也无法追踪它们。我认为在OMAP中,它被用于一些加密操作。
重置时,核心以安全模式启动。它设置了安全监视器(安全和非安全世界之间的网关),此时FIQ可以设置为路由到监视器。我认为是SCR.FIQ位可能被设置,然后所有FIQ都忽略CPSR.F的值并进入监视器模式。查看ARM ARM,但如果我记得正确,如果发生这种情况,您无法从非安全OS代码中知道。然后监视器将重置普通世界寄存器,并执行异常返回,PC设置为复位异常向量。
核心将以监视器模式接收中断,处理完毕后返回。
抱歉我不能在评论中回答您,我没有足够的声望,您可以修复它;),但我希望您能看到这个。

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