文档介绍:GIC 1. Introduction About the Generic Interrupt Controller architecture 1. 通用中断控制器架构定义: ? 通用的中断控制器可编程接口适用于单处理器或是多处理器系统中。? 寄存器用于管理中断源, 中断行为和中断分发到一个或多个处理器? Support for : — ARM 架构虚拟扩展—使能或禁用处理器中断的外设中断源—软件生成的中断(SGI) —中断屏蔽和优先级—单处理器和多处理器环境—在电源管理环境下的唤醒事件处理器实现了 ARM 安全扩展有安全状态,安全或非安全: ? 运行在非安全状态的软件被描述为非安全软件? 运行在安全状态的的软件被描述为安全软件 Interrupt states 图 1-1 中断处理状态机示意图 Inactive Pending 中断未触发状态, 该中断即没有 Pending 也没有 Active ;由于外设硬件产生了中断事件(或者软件触发) 该中断事件已经通过 Active CPU 已经应答( acknowledge )了该 interrupt 请求,并且正在处理中但是还没有处理完; 当一个中断源处于 Active 状态的时候,同一中断源又触发了中断,进入 pending 状态。 Active and pending Note :中断一旦被应答, distributor 就会把该中断的状态由 pendin g 状态改为 activ e 或者是 active and pending ( 这是和该 interrupt sourc e 的信号有关, 例如如果是电平中断并且保持了该 asserted 电平, 那么就是 active and Pending )。 Interrupt Grouping ? 默认所有的中断都是 Group0 中断,通过 IRQ 中断请求信号发送给连接到的处理器? 每一个中断可以被配置为 Group1 或者是 Group0 中断? CPU interface 可以配置成通过 FIQ 中断请求发送 Group0 中断给连接到的处理器? 将每一个中断配置为 Group 0 或是 Group 1 ? 通过 IRQ 或是 FIQ 异常请求将 Group 0 中断发送给目标处理器? 只能通过 IRQ 异常请求将 Group 1 中断发送给目标处理器? 一个统一的方案用于处理 Group 0和 Group 1 中断的优先级? 一些 Group 0 中断的配置的锁定是可选的 Interrupt stype 1) Peripheral Interrupt --- 边沿触发和电平触发 Private Peripheral Interrupt(PPI) --- ID16-ID31 are used for PPIs PPI 为每个 core 的私有外设中断 Share Peripheral Interrupt(SPI) --- Interrupt numbers ID32-ID1019 are used for SPIs SPI 为各个 core 公用的中断 2) Software Generated Interrupt(SGI) --- 边沿触发--- ID0-ID15 are used for SGIs(ID0-ID7 是不安全中断, ID8-ID15 是安全中断)SGI 为软件可以触发的中断,经常用于各个 core 之间的通信。该类中断通过相关联的中断号和产生该中断的处理器的 CPUID 来标识 3) 虚拟中断(Virtual interrupt) 4) 维护中断(Maintenance interrupt) Models for handling interrupts 表示中断可以发给所有的 CPU , 但只能由一个 CPU 来处理中断; 换句话说, 这种类型的中断有 N 个目标 CPU , 但只能由其中一个来处理; 当某一个处理器应答了该中断, 便会清除在所有目标处理器上该中断的挂起状态。表示中断可以发给所有 CPU , 每个 CPU 可以同时处理该中断。当该中断被某一个处理器应答了,这不会影响该中断在其他 CPU 接口上的状态。举两个例子说明:2 )比如 CPU0 给 CPU1-7 发送中断,想告知对方自己正在处理某个进程A。这种场景下, CPU1-7 都接收到中断, 都进入中断处理函数, CPU1- 7 获取到 CPU0 的信息后,在进程调度时,就可以绕开进程 A ,而自己调度其他进程。注:这个例子只是说明 N-N model ,实际上进程调度不是这样的。 Spurious interrupts —软件改变了该中断优先级—软件 Disable 该中断—软件改变了该中