GIC(Generic Interrupt Controller)
,GIC
的版本包括V1 ~ V4
,由于本人使用的SoC中的中断控制器是V2
版本,本文将围绕GIC-V2
来展开介绍;来一张功能版的框图:
GIC-V2
从功能上说,除了常用的中断使能、中断屏蔽、优先级管理等功能外,还支持安全扩展、虚拟化等;GIC-V2
从组成上说,主要分为Distributor
和CPU Interface
两个模块,Distributor
主要负责中断源的管理,包括优先级的处理,屏蔽、抢占等,并将最高优先级的中断分发给CPU Interface
,CPU Interface
主要用于连接处理器,与处理器进行交互;Virtual Distributor
和Virtual CPU Interface
都与虚拟化相关,本文不深入分析;再来一张细节图看看Distributor
和CPU Interface
的功能:
GIC-V2
支持三种类型的中断: SGI(software-generated interrupts)
:软件产生的中断,主要用于核间交互,内核中的IPI:inter-processor interrupts
就是基于SGI
,中断号ID0 - ID15
用于SGI
;PPI(Private Peripheral Interrupt)
:私有外设中断,每个CPU都有自己的私有中断,典型的应用有local timer
,中断号ID16 - ID31
用于PPI
;SPI(Shared Peripheral Interrupt)
:共享外设中断,中断产生后,可以分发到某一个CPU上,中断号ID32 - ID1019
用于SPI
,ID1020 - ID1023
保留用于特殊用途;Distributor
功能: Distributor
分发到CPU Interface
;SGI
中断分发到目标CPU上;CPU Interface
功能: 中断处理的状态机如下图:
Inactive
:无中断状态;Pending
:硬件或软件触发了中断,但尚未传递到目标CPU,在电平触发模式下,产生中断的同时保持pending
状态;Active
:发生了中断并将其传递给目标CPU,并且目标CPU可以处理该中断;Active and pending
:发生了中断并将其传递给目标CPU,同时发生了相同的中断并且该中断正在等待处理;GIC检测中断流程如下:
Distributor
确定好目标CPU后,将中断信号发送到目标CPU上,同时,对于每个CPU,Distributor
会从pending信号中选择最高优先级中断发送至CPU Interface
;CPU Interface
来决定是否将中断信号发送至目标CPU;EOI(End of Interrupt)
给GIC;全部0条评论
快来发表一下你的评论吧 !