使用ARM GIC(全局中断控制器)禁用中断

时间:2014-11-06 07:16:40

标签: arm

我有一个特定的要求,我需要在特定时间内禁用我的设备中断而不影响其他中断(ARM处理器上运行的代码)。 ARM文档指出ARM的所有GIC寄存器(与启用,禁用和清除中断有关)都是Banked寄存器,即每个CPU接口有一个。可以从指定的CPU访问存储寄存器,并控制CPU的PPI和SGI仅中断。

这是什么意思?如果我通过写入GIC寄存器来禁用特定中断,那么仅在该内核或所有内核上禁用它吗?

1 个答案:

答案 0 :(得分:2)

GIC有两个寄存器组;每个CPU集合的库存和distribution(也是分发商),它是GIC的系统全局。对于上面的链接,IrqEnSet0是每个CPU寄存器,它被再次存储并处理到CPU的PPI和SGI中断。 IrqEnSet1是全局中断列表,可能会禁用这些中断。 分发(也是分发)也可以将某些中断定位到CPU。

ARM为这些寄存器和 GIC different versions提供了许多不同的名称。所有这些概念都是相同的。有一组寄存器没有按CPU存储,这些寄存器全局控制,包括禁用系统中断。希望读者能够找到并阅读其SOC的具体控制器文档。

  

这是什么意思?如果我通过写入GIC寄存器来禁用特定中断,那么仅在该内核或所有内核上禁用它吗?

  • PPI - 外设私有中断。例如,SMP系统中的每CPU计时器。
  • SGI - 软件生成中断。在其他系统上也称为IPI。这允许从一个CPU到另一个CPU的信令。 (IPI是处理器间中断)。

这些中断仅对每个CPU都有意义。但是,以太网,SPI,视频,CAN总线,i2c,ADC等硬件通常都是系统全局的。

对于分配器寄存器,通常全局中断具有读/写启用/禁用。 per-CPU 的寄存器可能在分配器中只读,并指示存在中断。另一组寄存器(每个CPU)是启用/禁用每个CPU中断的常规机制。访问分发服务器时,软件应具有互锁(信号量),因为它对系统是全局的。或者,只有当选的或启动CPU才能使用分发服务器。每个CPU寄存器都有存储区,因此内核可以执行读 - 修改 - 写而不必担心竞争条件。

参考:ARM Generic Interrupt Controller - Architecture Specification,可能需要注册。