【发布时间】: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