GIC400简介

时间:2024-04-02 21:04:11

GIC400是arm公司的中断控制IP,提供axi4接口,主要功能:

1)中断的使能(enable,mask); 中断的优先级(poriority);  中断的触发条件(level-sensitive, edge-triggered);

2)单独分为两个Group,来支持secure, non_secure的中断; Group0通常只能secure axi访问, 接口连接至CPU的FIQ中断; Group1通常只能

none_secure访问, 接口连接至CPU的IRQ中断。

3)对multi-core和virtualized interrupt的支持。GIC400最多支持8核。

GIC400实现的中断类型有:

1) 16个software Generated Interrupts (SGIs);

SGI并没有外部的中断输入信号,每个target cpu都可以通过配置寄存器GICD_SGIR来直接产生中断,最多16个,ID0--ID15。

2) 6 external Private Periphaeral Interrupts (PPIs); 1 internal PPI

每个target cpu都有这么一组PPI; 信号具体分为:Legacy IRQ signal/Legacy FIQ signal/Non-secure physical timer/Secure physical timer

Virtual timer/Hypervisor timer/Virtual mainenance interrupt

所有的PPI interrupt只能是active-low触发。  通过外部引脚采样中断,nLEGACYIRQ[NUM_CPUS-1:0]、nLEAGCYFIQ[NUM_CPUS-1:0]、

nCNTPNSIRQ[NUM_CPUS-1:0]、nCNTPSIRQ[NUM_CPUS-1:0];

nCNTVIRQ[NUM_CPUS-1:0]、nCNTHPIRQ[NUM_CPUS-1:0]。

3) Configurable number of Shared Peripheral Interrupt (SPIs);

由所有的CPU共享,最多支持480个中断源,以32为步进。

每一个中断可以通过寄存器配置Group/Priority/target-cpu;通过配置寄存器GICD_IGROUPR/GICD_IPRIORITYR/GICD_ITARGETSR等。

每个寄存器32位,共16个。通过外部pin IRQS[NUM_SPIS-1:0]来输入。

GIC在Secure state支持32个level的Priority,在non_secure state最多支持16个level的Priority。当两个中断有相同的Priority时,按ID来选择,

越小的ID拥有越高的优先级(SGI,PPI,SPI的顺序)。在multi_core中,如果ID也相同,则按CPUID来排序,ID越小,优先级越高。

GIC400默认如果最高优先级的interrupt在一个disable的group中,那么GIC不会再将任何的中断发送给CPU,所以ARM建议,

将Group0的优先级设置比Group1要高,这样不会因为non_secure的中断挂起而影响secure的中断。

GIC400到CPU的中断signals有:

1) Physical interrupts; nFIQCPU[NUM_CPUS-1:0];    nIRQCPU[NUM_CPUS-1:0];

2) Virtual interrupts; nVFIQCPU[NUM_CPUS-1:0];   nVIRQCPU[NUM_CPUS-1:0];

两个唤醒信号:nFIQOUT[NUM_CPUS-1:0]; nIRQOUT[NUM_CPUS-1:0]。

GIC400包含一个AXI4 slave接口,支持32bit的位宽, 来配置寄存器,寄存器主要分为4大类:

1)Distributor registers; 主要设置寄存器的enable,mask,Priority,core,等 前缀:GICD_

其中一些寄存器GICD_CTRL, GICD_IGROUPR只能在secure下来访问。

2)CPU interface register; 主要设置寄存器的Priority mask, 从中断信号输入到相应CPU的propagated, 返回响应。

3)还有两个virtual interrupt的register:不了解先不介绍。