Gic 物理中断响应过程

 

时序图见https://www.cnblogs.com/alantu2018/p/8447477.htm

 

时间

交互动作的描述

T0时刻

Distributor检测到M这个interrupt source的有效触发电平

T2时刻

Distributor将M这个interrupt source的状态设定为pending

T17时刻

大约15个clock之后,CPU interface拉低nFIQCPU信号线,向CPU报告M外设的中断请求。这时候,CPU interface的ack寄存器(GICC_IAR)的内容会修改成M interrupt source对应的ID

T42时刻

Distributor检测到N这个优先级更高的interrupt source的触发事件

T43时刻

Distributor将N这个interrupt source的状态设定为pending。同时,由于N的优先级更高,因此Distributor会标记当前优先级最高的中断

T58时刻

大约15个clock之后,CPU interface拉低nFIQCPU信号线,向CPU报告N外设的中断请求。当然,由于T17时刻已经assert CPU了,因此实际的电平信号仍然保持asserted。这时候,CPU interface的ack寄存器(GICC_IAR)的内容会被更新成N interrupt source的ID

T61时刻

软件通过读取ack寄存器的内容,获取了当前优先级最高的,并且状态是pending的interrupt ID(也就是N interrupt source对应的ID),通过读该寄存器,CPU也就ack了该interrupt source N。这时候,Distributor将N这个interrupt source的状态设定为pending and active(因为是电平触发,只要外部仍然有asserted的电平信号,那么一定就是pending的,而该中断是正在被CPU处理的中断,因此状态是pending and active)

注意:T61标识CPU开始服务该中断

T64时刻

3个clock之后,由于CPU已经ack了中断,因此GIC中CPU interface模块 deassert nFIQCPU信号线,解除发向该CPU的中断请求

T126时刻

由于中断服务程序操作了N外设的控制寄存器(ack外设的中断),因此N外设deassert了其interrupt request signal

T128时刻

Distributor解除N外设的pending状态,因此N这个interrupt source的状态设定为active

T131时刻

软件操作End of Interrupt寄存器(向GICC_EOIR寄存器写入N对应的interrupt ID),标识中断处理结束。Distributor将N这个interrupt source的状态修改为idle

注意:T61~T131是CPU服务N外设中断的的时间区域,这个期间,如果有高优先级的中断pending,会发生中断的抢占(硬件意义的),这时候CPU interface会向CPU assert 新的中断。

T146时刻

大约15个clock之后,Distributor向CPU interface报告当前pending且优先级最高的interrupt source,也就是M了。漫长的pending之后,M终于迎来了春天。CPU interface拉低nFIQCPU信号线,向CPU报告M外设的中断请求。这时候,CPU interface的ack寄存器(GICC_IAR)的内容会修改成M interrupt source对应的ID

T211时刻

CPU ack M中断(通过读GICC_IAR寄存器),开始处理低优先级的中断。

 

Gicv3

Gicv3相对gicv2,重大改变之一就是中断路由方式发生了变化

Gicv2,distributer 直接分发给各个核上的cpu interface,因此它最多链接8个核。

Gicv3使用4层地址路由的方式:aff3.aff2.aff1.corelist,因此理论上最多可链接256*256*256*16=268,435,456个核。

路由图见https://blog.csdn.net/dongyanxia1000/article/details/70171264

 

每个核或者rdistributer的4层地址是硬件决定的,可以从armv8架构的每核上的MPIDR_EL1系统寄存器获取。此外ICC_CTLR_EL3.A3V, ICC_CTLR_EL1.A3V, and GICD_TYPER.A3V indicate whether four levels or three levels of affinity are implemented.(即,这些寄存器控制aff3是否可以为0,即仅支持3层地址)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值