0 资料
ARM® Generic Interrupt Controller Architecture version 2.0 Architecture Specification
1 中断处理状态机
1.1 中断处理状态说明及状态机转换图
说明:
Inactive:未激活,中断无效。中断非挂起或非激活。
Pending:挂起,中断有效。等待被处理的中断。
Active:激活,中断有效。正在被CPU处理的中断。
Active and pending:激活及挂起,中断有效。CPU正在处理当前中断且该中断源又发送中断信号过来。
1.2 Transition A1 or A2, add pending state(添加挂起状态)
添加挂起状态分为SGI和SPI/PPI两个处理路径:
(1)SGI
发生以下情况之一:
(1.1)软件写入GICD_SGIR (软中断生成寄存器)
(1.2)软件写入GICD_SPENDSGIRn(软中断设置挂起寄存器)
(2)SPI/PPI
发生以下情况之一:
(2.1)外围设备发出中断请求信号
(2.2)软件写入GICD_ISPENDRn(中断设置挂起寄存器)
1.2 Transition B1 or B2, remove pending state(删除挂起状态)
删除挂起状态分为SGI和SPI/PPI两个处理路径:
(1)SGI
软件写GICD_CPENDSGIRn(软中断清除挂起寄存器)
(2)SPI/PPI
发生以下情况之一:
(2.1)如果是电平触发中断,电平无效时清除挂起
(2.2)如果是边沿触发中断,软件写入GICD_ICPENDRn(中断清除挂起寄存器)
1.3 Transition C, pending to active(挂起到激活)
如果中断已启用,并且具有足够的优先级向处理器发出信号,则软件通过读取GICC_IAR(中断确认寄存器)实现挂起到激活的转换。
1.4 Transition D, pending to active and pending(挂起到激活及挂起)
挂起到激活及挂起状态分为SGI和SPI/PPI两个处理路径:
(1)SGI
发生以下情况之一:
(1.1)软中断生成及GICC_IAR(中断确认寄存器)均发生
(1.2)当两个或多个具有相同中断ID的未决SGI来自同一源处理器并以同一处理器为目标时。如果其中一个SGI遵循转换C,其他SGI则遵循转换D
(2)SPI/PPI
同时发生以下情况:
(2.1)中断使能
(2.2)软件读取GICC_IAR(中断确认寄存器),进入激活状态
(2.3)发送以下事件中的一个:
(2.3.1)电平触发中断的信号处于有效状态
(2.3.2)对于边缘触发的中断,是否发生这种转换取决于GICC_IAR的读取时间(中断确认寄存器)与中断检测时间。
1.5 Transition E1 or E2, remove active state(未激活状态)
通过写入GICC_EOIR(中断结束寄存器)或GICC_DIR(中断停用寄存器)进入未激活状态。这里需要注意:在GICv2 中只要对GICC_EOIR进行了有效写入就会自动将对应的中断停用(不再需要设置GICC_DIR中断停用寄存器)。