【问题标题】:fiq handler for arm64arm64 的 fiq 处理程序
【发布时间】:2023-03-18 08:10:01
【问题描述】:

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

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

    • 将寄存器压入堆栈
    • 读取 GIC 中断确认寄存器以识别中断号。
    • 检查是否不是虚假中断。如果是到 irq 处理程序末尾的虚假分支。
    • 分支到相应的高级 C ISR 以进行中断服务。
    • 写 GIC EOIR 标记中断完成
    • 从堆栈中弹出寄存器。
    • 返回主代码。

在 AArh32 FIQ 中曾经有存储寄存器 R8-R12,LR,SP;不需要推入堆栈。所以这是与 AArch32 中的 IRQ 的一个区别,其中所有寄存器(LR、SP 除外)都需要压入堆栈。

但我找不到 arm64 中存储的寄存器(LR 和 SP 除外)。 有人可以告诉我 arm64 的 FIQ 应该包含什么。如果有人可以指导我使用 arm64 的示例 FIQ 处理程序,那就更好了。

【问题讨论】:

    标签: interrupt-handling arm64 bare-metal


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多