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

  • 相关阅读:
    ActiveMq主从机制
    Calling handler.OnEndpointsUpdate报错原因
    【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
    【Android Studio安装部署系列】二十一、Android studio将项目上传到github中
    【Android Studio安装部署系列】二十、Android studio如何将so文件添加到svn中
    【Android Studio安装部署系列】十九、Android studio使用SVN
    【Android Studio安装部署系列】十八、Android studio更换APP应用图标
    【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件
    【Android Studio安装部署系列】十六、Android studio在layout目录下新建子目录
    【Android Studio安装部署系列】十五、Android studio添加Assets目录
  • 原文地址:https://www.cnblogs.com/-9-8/p/4735805.html
Copyright © 2020-2023  润新知