我有一个特定的要求,我需要在特定时间内禁用我的设备中断而不影响其他中断(ARM处理器上运行的代码)。 ARM文档指出ARM的所有GIC寄存器(与启用,禁用和清除中断有关)都是Banked寄存器,即每个CPU接口有一个。可以从指定的CPU访问存储寄存器,并控制CPU的PPI和SGI仅中断。
这是什么意思?如果我通过写入GIC寄存器来禁用特定中断,那么仅在该内核或所有内核上禁用它吗?
答案 0 :(得分:2)
GIC有两个寄存器组;每个CPU集合的库存和distribution(也是分发商),它是GIC的系统全局。对于上面的链接,IrqEnSet0
是每个CPU寄存器,它被再次存储并处理到CPU的PPI和SGI中断。 IrqEnSet1
是全局中断列表,可能会禁用这些中断。 分发(也是分发)也可以将某些中断定位到CPU。
ARM为这些寄存器和 GIC 的different versions提供了许多不同的名称。所有这些概念都是相同的。有一组寄存器没有按CPU存储,这些寄存器全局控制,包括禁用系统中断。希望读者能够找到并阅读其SOC的具体控制器文档。
这是什么意思?如果我通过写入GIC寄存器来禁用特定中断,那么仅在该内核或所有内核上禁用它吗?
这些中断仅对每个CPU都有意义。但是,以太网,SPI,视频,CAN总线,i2c,ADC等硬件通常都是系统全局的。
对于分配器寄存器,通常全局中断具有读/写启用/禁用。 per-CPU 的寄存器可能在分配器中只读,并指示存在中断。另一组寄存器(每个CPU)是启用/禁用每个CPU中断的常规机制。访问分发服务器时,软件应具有互锁(信号量),因为它对系统是全局的。或者,只有当选的或启动CPU才能使用分发服务器。每个CPU寄存器都有存储区,因此内核可以执行读 - 修改 - 写而不必担心竞争条件。
参考:ARM Generic Interrupt Controller - Architecture Specification,可能需要注册。