ARM通用中断控制器GIC之中断处理
在阅读本章之前,可以参考笔者之前关于GIC的一些描述:
ARM通用中断控制器GIC(generic Interrupt Controller)简介
ARM架构Generic Interrupt Controller(GIC)之Distributor和CPU interface功能介绍
ARM架构Generic Interrupt Controller(GIC)详解之术语介绍
一,中断处理简述
中断处理过程包括了:
- 如何识别辨认中断
- 软件层如何配置GIC,从而控制中断
- GIC在每个CPU interface上为每个中断维护的状态机
- 处理器的异常模型如何与GIC交互
GIC架构支持单处理器和多处理器系统,无论是单处理器还是多处理器系统,GIC架构都可以包含GIC安全扩展: - 能够识别一个与之相连的,已经实现了ARM安全扩展的处理器,对GIC寄存器是安全访问还是非安全访问。
- 实现了判断对GIC寄存器是安全访问还是非安全访问,以至于:
– 可以复用(bank)一些寄存器,使同一个寄存器能够分为安全和非安全的拷贝。
– 一些寄存器是安全的(secure),这意味着只能在安全模式下访问。
– 剩下的寄存器是公共的(common),这意味着它们可以在安全和非安全模式下被访问。 - 可以使用中断分组(interrupt grouping)特性来处理安全中断和非安全中断,比如:
- Group 0 中断为安全中断
- Group 1 中断为非安全中断
- 在多处理器系统中,可能只在它的一些CPU interface中实现了GIC的安全扩展。
除了GIC v1版本不支持GIC安全扩展,在其他GIC架构中都支持中断分组(interrupt grouping): - 默认情况下,所有中断都是Group 0中断,并且使用 IRQ中断请求被发送给与之相连的处理器。
- 每个中断可以被配置成 Group 0 或者 Group 1 中断。
- 一个CPU interface也可以被配置成使用FIQ中断请求,对一个已连接的处理器发送 Group 0 中断信号。
在多处理器系统中处理不同类型的中断
GIC支持外设中断( peripheral interrupts)和软件产生的中断(software-generated interrupts):
- 软件产生的中断(SGI)使用GIC的 N-N 模型。
- 外设(硬件)中断使用 1-N 模型。
如何识别所支持的中断
GIC架构通过中断ID来识别不同类型的中断,为了能够正确地处理中断,软件层必须知道GIC所支持的中断ID。