我目前正在尝试理解在ARM架构中使用GIC或指令以不同方式屏蔽/禁用中断之间的关系。
到目前为止,我已经了解到以下内容:
- 可以用于启用/禁用处理器的中断。使用会禁用发出该指令的处理器的所有中断(通过设置寄存器),而使用则启用中断。这不会改变中断分配器或CPU接口的任何状态。
- 特定中断可以通过向中断分配器中的GICD_ICENABLERn寄存器之一写入
1
来屏蔽。 - 也可以通过在中断分配器中不设置目标来禁用特定中断。
迄今为止,我的理解正确吗?
现在我不清楚这些方法如何相互关联。我假设以下内容:
如果使用寄存器禁用中断,然后信号传递任何类型的中断(无论是电平触发还是边沿触发),那么CPU接口将被通知中断(假设其设置为目标),从而将中断状态更改为“待处理”。然后,只要发出指令,处理器将切换到中断处理。
然而,如果通过不设置目标来全局禁用中断并且信号传递了边沿触发中断,则CPU接口不会更改其状态。因此,如果稍后更改目标,则不会向任何CPU接口发送中断(因为触发器不再处于活动状态)。这意味着,在这种情况下会丢失边沿触发的中断。对于电平触发中断,只有在中断线仍保持断开状态时才会向CPU接口发送信号。这正确吗?还是分配器“记忆”状态并确定是否已传递中断,以便在两种情况下稍后分发中断?
现在,如果中断被屏蔽,则它将不会分配给任何CPU接口。但是,在这种情况下,我期望在取消屏蔽后稍后会分配中断。