GIC400简介

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:不了解先不介绍。

posted @ 2015-08-17 10:09  _9_8  阅读(2937)  评论(0编辑  收藏  举报