有谁知道如何启用 ARM FIQ?
2 回答
除了在管理员模式下启用或禁用 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。
芯片制造商可以使用 trustzone 扩展对您关闭 FIQ。
Trustzone 创建了一个安全的世界和一个正常的世界。安全世界有自己的主管、用户和内存空间。这个想法是为了路由安全操作,因此即使您扫描总线上的引脚,它们也不会离开芯片并且无法追踪。我认为在 OMAP 中它用于一些加密操作。
复位时,内核以安全模式启动。它设置了安全监视器(安全和非安全世界之间的网关),此时可以设置 FIQ 以路由到监视器。我认为可能是设置了 SCR.FIQ 位,然后所有 FIQ 忽略 CPSR.F 的值并进入监控模式。查看 ARM ARM,但如果我没记错的话,你无法从不安全的操作系统代码中知道。然后监视器将重置普通世界寄存器并在 PC 设置为重置异常向量的情况下执行异常返回。
内核将中断监视模式,执行其操作并返回。
抱歉,我无法在评论中回答你,我没有足够的声誉,你可以随时解决这个问题;),但我希望你能看到这个