【发布时间】:2013-10-30 04:22:24
【问题描述】:
[更新问题,因为 GIC v2 有 3 个寄存器 ACK、EOIR、DIR]
这是最基本的问题,我需要其他人来澄清并说明以下顺序是正确的。
在接下来的拱门中,
[Core] ----- [ Interrupt Controller ] --Level Triggered -- [Device]
- 设备提升电平并通知中断控制器
- 乙。中断控制器触发一个中断的核心。 (假设内核的中断已启用)
- c.假设中断控制器是 GIC(与 ARM 一起使用)并且它有 3 个寄存器
- - 中断停用 (GICC_DIR)
- - 中断 ACK(返回 IRQ 号),(GICC_IAR)
- - 中断寄存器结束 (GICC_EOIR)
注意:在 GICv2 实现中,将 GICC_CTLR.EOImode 设置为 1 可将优先级降低和中断停用操作分开。
参考:3 中断处理和优先级 (ARM IHI 0048B.b ID072613)
现在需要确认的点,
- d.直到核心不确认中断以获取 IRQ,中断仍处于挂起状态,设备中断线至中断控制器级别高
- e.核心禁用其中断。 Core ACK 是否获得 IRQ,设备的中断线没有变化。
现在这里可能有两种情况。
- A.核心屏蔽 GIC 上的特定中断,但在设备上不执行任何操作来清除设备上的中断。核心启用其中断
- 乙。核心设置 GICC_EOImode =1,并将中断 id 写入 EOIR。核心启用其中断
基于 (A) 或 (B)
第一季度。中断会再次从中断控制器引发到核心吗?
现在interrupt nesting 在这种情况下如何工作?
【问题讨论】:
-
查看我的 Edit2。我认为
GICC_DIR不是你想的那样。它不会禁用中断,它只是ack - 知道中断。 GIC IAR 或 ACK 更像是传统的 PEND,而 EOIR 是优先级丢弃(EOImode=1)。 DIR 是一个传统的ACK;即,CPU 确认中断完成。在 EOImode=0 的情况下,对 EOIR 的写入会丢弃活动中断的优先级(因此我的优先级较低)并一次性确认。您需要写信给ICENABLERx或某个分发器寄存器以禁用它并阻止级别IRQ 再次发生。 -
GIC_DIR 是停用中断寄存器