linux中断响应时间太慢_ARM的中断处理 [二]

本文详细探讨了ARM处理器在Linux系统下的中断处理流程,从GIC的Inactive、Pending、Active和Active and Pending四种状态出发,解释了中断的触发、响应和处理。介绍了Linux内核如何通过handle_domain_irq()和handle_edge_irq()函数处理中断,并讨论了边沿触发和电平触发中断的不同处理机制,阐述了中断嵌套和同步问题。
摘要由CSDN通过智能技术生成

a3ded8c7972330dea7ca757315b3a44f.png

ARM的中断处理 [一]

中断源的状态

GIC对一个中断源的处理过程包含Inactive, Pending, Active和Active and Pending四种状态。

d79478c3f289e041b461633f79e0040a.png

中断源没有被assert(触发)的时候,处于初始的"Inactive"状态。如果某个中断源被触发,GIC会将IAR寄存器(Interrupt Acklowlege Register)中该中断源对应的bit置1,然后通知CPU core(PE)。在CPU尚未做出应答之前,该中断源处于"Pending"(待处理)状态。这里IAR可理解为中断标志寄存器。

在Pending状态中,GIC会关闭对该中断源的响应,在此期间,如果该中断源上有新的中断到来,所有连接GIC的CPU都无法收到。因为GIC是中断源和CPU之间的桥梁,GIC已经在桥的这一头挡住了中断源,在桥的另一头的CPU自然是没办法接收的。。

3ec9dde5ec6fff4004246ffa42f751c0.png

接下来CPU会读取IAR寄存器中置1的bit,读取后硬件自动将其清零,同时回复一个硬件的ACK信号给GIC,表示CPU已经开始处理,此时中断源进入"Active"(正在处理)状态。

1dd855ed65bc7477401dcc7ac0cb3b15.png

这时GIC会解除对该中断源的屏蔽,也就是说,如果之后该中断源上有第二个中断到来,那么CPU是可以接收到的。从新来的中断的角度,该中断源应该处于Pending状态,而从上一个还没处理完的中断的角度,该中断源又应该处于Active状态,所以这个特殊时期的状态被叫做Active and Pending(以下简称A&P)。

ee434be6d7135a3cc8d92d2bdb960120.png

之后,CPU完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值