arm GIC介绍之二

本文详细介绍了ARM Generic Interrupt Controller (GIC) 的GIC_V3版本,包括Distributor、Redistributor和CPU Interface的主要寄存器及其功能。Distributor寄存器如GICD_CTLR用于控制使能,GICD_TYPER提供平台中断信息,GICD_IPRIORITYR设置中断优先级。Redistributor寄存器如GICR_CTLR管理CPU中断接收,GICR_WAKER用于唤醒低功耗模式的CPU。CPU Interface的GICC_CTLR、GICC_PMR、GICC_RPR和GICC_IAR等寄存器则参与中断处理和抢占。通过对这些寄存器的配置,可以实现中断的分发、优先级管理和处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

连接"arm GIC介绍之一",我们补充对应的GIC 寄存器描述,和主要的用法说明,仅供参考。 

3 . GIC_V3寄存器介绍

我们把完整的图放在这里:



 从这里看到,GIC分为3个主要的部分,要完成其作用,而且给用户进行预先配置的方法,GIC就提供了一寄存器,这些寄存器的设计就是围绕着这些主要的功能来实现的

3.1Distributor Registers

在前面介绍过,Distributor主要完成对应的IRQ状态的记录,对应的IRQ分发,那么围绕这样的功能,对应的寄存器主要有:



这里面有Distributor控制寄存器,控制Distributor使能和关闭,以及对应的具体IRQ的状态寄存器,比如GICD_ISACTIVER,这里记录某一个IRQ是否ACTIVE,还有逻辑功能寄存器,比如GICD_IPRIORITY,这里记录对应

IRQ的优先级别。这些都以GICD_*为前缀打头。我们来仔细说明。


GICD_CTLR




这个是GICD_CTLR寄存器,名字和对应的位功能来看是对Distributor控制使能,比如BIT_1,就是使能GROUP_1,


并且是NON-SECURE,如果是LINUX系统,就是KERNEL空间。一般来说对这个寄存器每个位都是打开的。BIT_31是等待回应,当配置对应寄存器了,写入到硬件,需要生效,那么可以读取这个位来看是否已经写入配置信息并生效。ARE是对应的AFFINITY,其实就是分配到哪个具体的CPU,我们在ROUTER寄存器说明时候来补充。

GICD_TYPER


这个是GICD_TYPER寄存器,其主要作用是获取SOC平台厂商提供的GIC的具体信息,现在一般提供信息是该GIC能够支持最多多少个IRQ硬件中断源。


 



ITLinesNumber:

SPI numbers in specification, butthis should include (SGI, PPI actually)

比如我们现在X20平台上都出来并且换算出来ITLinesNumber: 0xb,那么每个数字表示有32IRQ      

12* 32-1= 383 IRQ numbers.

支持384IRQ,从0383,为最大数字。

最大支持

(0x1f+1)*32-1 =1023 

1024个中断,这个GIC现在通用的说明是一致的,如果不考虑LPI的话。

GICD_IGROUP&GICD_IGRPMODR

这两个在一起使用,一个IRQ对应一个BITGICD_IGROUP,以及一个BITGICD_IGRPMODR

所以如果支持384IRQ,那么真个GIC就需要384BIT来表示384GICD_IGRPMODR,同理其它对应的

BIT方式表示的也是如此。


这两个结合起来表示某个具体的IRQ应该送到哪个Ex,是安全域还是非安全域,现在一般只支持3个,如上图表示。


GICD_IROUTER


这个寄存器的名字不好理解,其实,如果我们修改下GICD_TARGET,这样,就容易理解了。简单来说,该寄存器控制一个IRQ发到哪个CPU进行处理。在现在的ARM中,cpu的拓扑结构用AFFINITY来表示。



CPUCLUSTER为单位进行管理,比如X20上有10CPU,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值