Assembly ARM上CPSID指令与通用中断控制器的关系

Assembly ARM上CPSID指令与通用中断控制器的关系,assembly,arm,interrupt,Assembly,Arm,Interrupt,我目前正试图了解使用GIC或cps指令屏蔽/禁用ARM体系结构中断的不同方式之间的关系 到目前为止,我收集了以下信息: cps可用于启用/禁用处理器的中断。使用cpsid i禁用发出指令的处理器的所有中断(通过设置cpsr寄存器),并使用cpsie i启用中断。这不会改变中断分配器或CPU接口的任何状态 通过将1写入中断分配器中的一个GICD_ICENABLERn寄存器中的相应位,可以屏蔽特定中断 也可以通过在中断分配器中不设置目标来禁用特定中断 到目前为止,这种理解正确吗 现在我还不清楚这

我目前正试图了解使用GIC或
cps
指令屏蔽/禁用ARM体系结构中断的不同方式之间的关系

到目前为止,我收集了以下信息:

  • cps
    可用于启用/禁用处理器的中断。使用
    cpsid i
    禁用发出指令的处理器的所有中断(通过设置
    cpsr
    寄存器),并使用
    cpsie i
    启用中断。这不会改变中断分配器或CPU接口的任何状态
  • 通过将
    1
    写入中断分配器中的一个
    GICD_ICENABLERn
    寄存器中的相应位,可以屏蔽特定中断
  • 也可以通过在中断分配器中不设置目标来禁用特定中断
到目前为止,这种理解正确吗

现在我还不清楚这些方法是如何相互关联的。我假设如下:

如果使用
cpsr
寄存器禁用中断,然后发出任何类型的中断信号(无论是电平还是边缘触发),则cpu接口将收到中断通知(假设它被设置为目标),从而将中断状态更改为
挂起
。然后,一旦发出
cpsie i
指令,处理器将切换到中断处理

但是,如果中断因未设置目标而被全局禁用,并且边缘触发的中断发出信号,CPU接口将不会更改其状态。因此,如果以后更改了目标,中断将不会发送信号给任何CPU接口(因为触发器不再处于活动状态)。这意味着,在这种情况下,边缘触发中断将丢失。对于电平触发的中断,只有在中断线仍然被断言的情况下,才会向CPU接口发送信号。这是正确的吗?或者分发服务器是否“记住”状态以及中断是否已发出信号,以便在这两种情况下,稍后分发中断

现在,如果中断被屏蔽,它将不会被分发到任何CPU接口。但是,在这种情况下,我希望稍后在取消屏蔽后分发中断

到目前为止,这种理解正确吗

基本上是正确的。GIC是一个单独的块,用于多CPU设计。
cpsiX
指令位于ARM内核中。GIC进一步分为全局分配器(也称为分配器)和每CPU寄存器。因此,在四核系统中,每个CPU将有四组GIC,但只有一个分配器。每个核心寄存器通常映射到每个核心的相同地址。当然,每个核心都有一个核心(并且
cpsiX
将应用于它)

您还可以使用每CPU寄存器(如
GICC_PMR
等)屏蔽中断,也可以直接使用外围寄存器屏蔽中断(即,以太网控制器具有中断启用功能,向GIC dist->GIC每CPU->ARM核心发送信号)。如果是外部中断,最后一个将不适用。通常,许多GIC SPI实际上是片上/SOC布线的,因此您可以禁用源

这意味着,在这种情况下,边缘触发中断将丢失。对于电平触发的中断,只有在中断线仍然被断言的情况下,才会向CPU接口发送信号。这是正确的吗

这似乎大体上是正确的。不过,我想了解一下我们实施GIC的具体情况。通常,这是gic pl390或gic pl400。根据GIC版本和可用寄存器的不同,屏蔽、挂起和取消的处理可能相当复杂。例如,如果一个CPU可能发出信号,但在处理中断之前,另一个CPU已经读取并处理了中断。如果只将中断路由到一个CPU,则不会发生这种情况。然后是中断优先级和每次清空的中断。参见第3.2.1章优先级下降和中断停用

对于边缘触发中断,如果需要维修硬件,则需要在重新启用中断(在分发服务器级别)之前查看。分发服务器将保持挂起状态,并且如果使用了
cpsie
或每CPU寄存器启用。

要扩展中提到的“单独块”方面,ARM CPU核心有一条活动的低nIRQ线(和相应的nFIQ线)。CPSR位只控制核心如何在内部响应该信号——不管断言什么,它只是坐在另一端等待某种响应,而不知道核心在做什么


类似地,从另一个角度来看,虽然GIC CPU接口设计有一个低优先级中断输出和一个高优先级中断输出,以对应ARM内核的nIRQ和nFIQ,但没有理由它不能连接到其他东西(规范甚至明确地说了这一点)。因此,GIC架构几乎不知道这些信号的接收器对它们做了什么-
cps
如果另一端有一些定制的DSP,则完全不相关,而不是ARM体系结构核心。

您是否给了
ARM通用中断控制器体系结构规范
ARM认证工程师学习指南
一个镜头?到目前为止,我浏览了ARM GIC体系结构规范(版本2),但没有提到cpsid说明。我不知道学习指南,所以我会看一看。我对GICC_DIR的引用有点困惑。据我所知,该寄存器仅用于停用活动中断(当前正在服务的中断)。当中断优先级下降与中断de分离时