arm64的Fiq处理程序



我试图在汇编中编写arm64(AArch64)的FIQ处理程序。到目前为止,我已经编写了一个运行良好的IRQ处理程序。我只是想知道我的FIQ处理程序是否应该与我的IRQ不同。

  • 我的FIQ处理程序执行以下操作:

    • 将寄存器压入堆栈
    • 读取GIC中断Ack寄存器以识别中断号。
    • 检查是否为伪中断。如果是假的,分支到irq处理程序的结束。
    • 分支到相应的高电平C ISR进行中断服务。
  • 写入GIC eir以标记中断完成
  • 返回到主代码

在AArh32中,FIQ使用银行寄存器R8-R12,LR,SP;不需要压入堆栈。因此,这是与AArch32中的IRQ的一个不同之处,其中所有寄存器(LR,SP除外)都需要压入堆栈。

但我找不到arm64中存储的寄存器(除了LR &SP)。谁能告诉我arm64的FIQ中应该包含什么?如果有人能指导我对arm64的FIQ处理程序的例子更好。

理论上,您只需要在中断处理程序中保存这些寄存器。但是从通用性的角度来看,应该保存所有通用寄存器(X0到X30)。

LR (Link Register)是arm64中X30的别名。您不需要保存SP,但必须确保SP在从FIQ处理程序返回时保持不变,特别是在用汇编语言编写FIQ处理程序时。C编译器会处理堆栈指针,所以在C ISR中你不用担心。

相关内容

  • 没有找到相关文章

最新更新