9.3 功能概述
这个章节包括:
- 功能接口
- 分配器
- CPU 接口
9.3.1 功能接口
图所示显示了GIC图解
图2列举出了所有的信号,但是一些GIC的配置也学不包含这些信号
GIC的主要模块包括:
- AMBA从接口
- 分配器
- CPU接口
- 时钟复位
- 使能和匹配信号
9.3.1.1 AMBA从接口
AMBA从接口提供了访问GIC寄存器,这些寄存器能使你编程系统配置参数并获得状态信息
GIC提供两个AMBA从接口:一个为分配器另一个为共享CPU接口
- AXI从接口
AXI从接口包括AXI通道:
- 写地址
- 写数据
- 写应答
- 读地址
- 读数据
9.3.1.2 分配器
分配器接收中断并且为相应的CPU接口提供最高优先级中断,低优先级的中断当中断优先级变成最高的时候它会传递到适当的CPU接口
图举例说明了分配器
在多处理器配置中,分配器为每个CPU接口提供16个PPI和1-998个SPI,对于每个SPI,你能配置非配器去控制有多少个CPU接口寻址中断路径
9.3.1.3 CPU 接口
一个cpu接口包含一个可编程中断优先级掩码
CPU只有在中断优先级高于以下条件的情况下接受挂起的中断:
- 对中断优先级进行掩码
- 现在正在服务的中断
图示CPU接口
9.3.1.4 时钟和复位
图示描述了GCLK 和 GRESETN两种信号
9.3.2 分配器
分配器集中控制了所有的中断源并且决定着每个中断的优先级,对于每个CPU接口,为中断屏蔽和抢占处理,中断优先级向接口分配最高优先级的中断
分配器提供一个可编程接口:
- 全局的使能CPU接口中断转发
- 使能或者禁止使能每个中断
- 配置每个中断的优先级
- 为每个中断配置目标处理器列表
- 配置每个外设中断触发形式
- 配置每个中断安全与否(GIC植入了安全扩展条件下)
- 发送SGI到每一个目标处理器
- 每个中断是否状态可见
- 为外设中断提供配置或者清除状态的软件机制
9.3.2.1中断ID
中断利用ID号区分,每个CPU接口能识别1020个中断,分配器因为SPIS和PPIS模块支持1244个中断
GIC分配中断ID号ID0-ID1019如下
- 中断ID32-ID1019为SPIs服务
- 中断ID0-ID31应用于CPU接口私有并且存入分配器的中断,对于一个存入中断,相同的ID号可对应于许多中断,你能通过ID号和关联的CPU接口号确定一个存入的中断。存入的中断ID号应用与SGIs和PPIs,各自对应:
----ID16-ID31
----多处理器系统中:
一个PPI被一个特殊的CPU接口触发,并且对于那个接口来说是私有的,当为一个CPU接口指定优先级的时候,分配器考虑只有PPIs被那个接口触发
每个连接的处理器通过写分配器中ICDSGIR寄存器发射一个SGI信号,对应于软件中断寄存器,每个SGI能处理多个处理器,在分配器和目标处理器中,一个SGI通过连接的中断号被唯一的确定,ID0-ID15.并且处理器源ID,CPUID0-CPUID7.对应于GIC的加载的SGI能处理多软件中断。分配器忽略任何非连接到每个CPU接口处理器对ICDSGIR的写操作。
系统独立的配置每个中断的优先级和中断号
9.3.3 CPU接口
每个CPU接口块提供:
- 为处理器提供的一个接口来操作GIC
- 编程接口:
-识别中断
-标识中断处理完成进度
-配置处理器中断优先级掩码
-定义处理器抢占优先级
-决定处理器挂起的最高中断优先级
在使能的条件下,一个CUP接口获得的对应最高优先级挂起中断决定了中断是否对处理器的需求触发了一个恰当的优先级
决定是否触发一个处理器需求的中断,对于处理器来说,CUP会考虑中断优先级掩码和抢占设置。任何条件下,连接的处理器能读从CPU接口寄存器读出最高活动优先级中断的优先级。
处理器通多读CPU接口中断识别寄存器去识别中断请求。CPU接口返回如下值的其中一个:
- 最高优先级挂起中断的ID号,如果中断产生的中断异常对于处理器来说有一个合适的优先级,CPU会返回这个ID号。对于中断识别来说,这是一个正常的反应
- 意外条件下,一个中断ID号标识一个伪中断
当对于处理器来说没有对应的合适中断优先级的挂起中断,接口会等待中断请求信号
当处理器上的中断处理器已经完成中断过程的处理,它会写CPU接口以表明中断完成。因此,分配器改变中断状态如下:
- 从活动变成不活动或者
- 从活动和挂起变成挂起