ARM的中断处理 [一]
中断源的状态
GIC对一个中断源的处理过程包含Inactive, Pending, Active和Active and Pending四种状态。
中断源没有被assert(触发)的时候,处于初始的"Inactive"状态。如果某个中断源被触发,GIC会将IAR寄存器(Interrupt Acklowlege Register)中该中断源对应的bit置1,然后通知CPU core(PE)。在CPU尚未做出应答之前,该中断源处于"Pending"(待处理)状态。这里IAR可理解为中断标志寄存器。
在Pending状态中,GIC会关闭对该中断源的响应,在此期间,如果该中断源上有新的中断到来,所有连接GIC的CPU都无法收到。因为GIC是中断源和CPU之间的桥梁,GIC已经在桥的这一头挡住了中断源,在桥的另一头的CPU自然是没办法接收的。。
接下来CPU会读取IAR寄存器中置1的bit,读取后硬件自动将其清零,同时回复一个硬件的ACK信号给GIC,表示CPU已经开始处理,此时中断源进入"Active"(正在处理)状态。
这时GIC会解除对该中断源的屏蔽,也就是说,如果之后该中断源上有第二个中断到来,那么CPU是可以接收到的。从新来的中断的角度,该中断源应该处于Pending状态,而从上一个还没处理完的中断的角度,该中断源又应该处于Active状态,所以这个特殊时期的状态被叫做Active and Pending(以下简称A&P)。
之后,CPU完成了