Linux 中断子系统中GIC 中断控制器基本分析

news2024/10/7 18:26:20

GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核(STM32)中的 NVIC。

GIC:Generic Interrupt Controller,通用中断控制器。

NVIC:Nested Vectored Interrupt Controller,嵌套中断向量控制器。

目前 GIC 有 4 个版本:V1~V4,V1 是最老的版本,已经被废弃了。V2~V4 目前正在大量的使用。GIC V2 是给 ARMv7-A 架构使用的,比如 Cortex-A7、Cortex-A9、Cortex-A15 等, V3 和 V4 是给 ARMv8-A/R 架构使用的,也就是 64 位芯片使用的。

我们使用的是 IP 核,也就是 gic400、gic500、gic600。支持对应的架构。

gic400,支持 GIC-v2 架构。

gic500,支持 GIC-v3 架构。

gic600,支持 GIC-v3 和 GIC-v4 架构。

GIC-v2

GIC V2 最多支持 8 个核。ARM 会根据 GIC 版本的不同研发出不同的 IP 核,半导体厂商直接购买对应的 IP 核即可,比如 ARM 针对 GIC V2 就开发出 了 gic400 这个中断控制器 IP 核。

当 GIC 接收到外部中断信号以后就会报给 ARM 内核,但是 ARM 内核只提供了四个信号给 GIC 来汇报中断情况:VFIQ、VIRQ、FIQ 和 IRQ

VFIQ:虚拟快速 IRQ。

VIRQ:虚拟 IRQ。

FIQ:快速 IRQ。

IRQ::Interrupt ReQuest。

VFIQ 和 VIRQ 是针对虚拟化的,我们不讨论虚拟化中断,剩下的就是 FIQ 和 IRQ 了。一般我们只使用 IRQ,所以相当于 GIC 最终向 ARM 内核就上报一个 IRQ 信号。

下图来源于ARM官方手册,是 GIC-v2 的框图:

左侧部分就是中断源,中间部分就是 GIC 控制器,最右侧就是中断控制器向 处理器内核发送中断信息。我们重点要看的肯定是中间的 GIC 部分,GIC 将众多的中断源分为 分为三类:

①、SPI(Shared Peripheral Interrupt),共享外设中断,该中断来自于外设,所有 Core 共享的中断。比如按键中断、串口中断等等,这些中断所有的 Core 都可以处理,不限定特定 Core。

②、PPI(Private Peripheral Interrupt),私有外设中断,该终端来自于外设,被特定的核处理。GIC 是支持多核的,每个核有自己独有的中断

③、SGI(Software-generated Interrupt),软中断,由软件触发引起的中断,通过向寄存器 GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信

中断源有很多,为了区分这些不同的中断源肯定要给他们分配一个唯一 ID,这些 ID 就是中断 ID。GIC-v2中每一个 CPU 最多支持 1020 个中断 ID,中断 ID 号为 ID0~ID1019。这 1020 个 ID 包 含了 PPI、SPI 和 SGI。这 1020 个 ID 分 配如下:

ID0~ID15:这 16 个 ID 分配给 SGI。每个CPU核都有自己的16个。

ID16~ID31:这 16 个 ID 分配给 PPI。每个CPU核都有自己的16个。

ID32~ID1019:这 988 个 ID 分配给 SPI,像 GPIO 中断、串口中断等这些外部中断 ,至于具体到某个 ID 对应哪个中断那就由半导体厂商根据实际情况去定义了。

GIC-v2 架构分为了两个逻辑块:Distributor 和 CPU Interface,也就是分发器端和 CPU 接口端。

Distributor(分发器端):中间那个框框,此逻辑块负责处理各个中断事件的分发问题,也就是中断事件应该发送到哪个 CPU Interface 上去。分发器收集所有的中断源,可以控制每个中断的优先级,它总是将优先级最高的中断事件发送到 CPU 接口端。分发器端要做的主要 工作如下:

①、全局中断使能控制。

②、控制每一个中断的使能或者关闭。

③、设置每个中断的优先级。

④、设置每个中断的目标处理器列表。

⑤、设置每个外部中断的触发模式:电平触发或边沿触发。

⑥、设置每个中断属于组 0 还是组 1。

CPU Interface(CPU 接口端):CPU 接口端听名字就知道是和 CPU Core 相连接的,因此在图中每个 CPU Core 都可以在 GIC 中找到一个与之对应的 CPU Interface。CPU 接口端 就是分发器和 CPU Core 之间的桥梁,CPU 接口端主要工作如下:

①、使能或者关闭发送到 CPU Core 的中断请求信号。

②、应答中断。

③、通知中断处理完成。

④、设置优先级掩码,通过掩码来设置哪些中断不需要上报给 CPU Core。

⑤、定义抢占策略。

⑥、当多个中断到来的时候,选择优先级最高的中断通知给 CPU Core。

GIC-v2 支持 bypass 功能,当左上角 CFGSDISABLE 信号为高,外部来的 IRQ 和FIQ 不经过 GIC 仲裁,直连 CPU core 的 IRQ 和 FIQ 引脚。此场景可能用在启动阶段,一般不用。

右上角有 GICD_ 、GICC_ 、GICV_ 、GICH_ 系列寄存器,因为不讨论虚拟中断,所以我们一般只关心 GICD_ 、GICC_ 开头的寄存器, GICD_ 代表 Distributor 分配器的寄存器, GICC_ 代表 CPU interface 的寄存器。

有一点需要说明:不管 GIC 如何对中断进行分类,对 CPU core 来讲,只分为 IRQ、FIQ、VIRQ、VFIQ,一般所有的外部中断对CPU core来讲都属于IRQ:

即便在 GIC 内部分为了 SPI、SGI、PPI,但是最后都会到 CPU interface,CPU interface 再给 CPU core ,CPU core 只认为有四种中断类型,普通都是 IRQ。

GIC-v3

GIC-v3 架构有改变,中断号也变多了,不过还是向后兼容 GIC-v2 的。

GIC-v3支持超多核,以 xxx.xxx.xxx.xxx 命名,不止8核,GIC-v2 只支持 8 核,命名为 0-7 。

GIC-v3将 CPU interface 从GIC侧移到了CPU侧,因为处理中断会频繁访问 CPU interface 的寄存器,移到 CPU 侧加快访问速度,中断处理就会加快。

GIC-v3 的架构变化如下:以前 SPI、PPI、SGI 都归 Distributor(分发器端) 管,现在只有 SPI 归 Distributor管,PPI、SGI、LPI 都归 Redistributor 管,作用还是一样的。

寄存器分布,不同东西的寄存器开头不一样:

GIC-v 3的中断号规定如下,来源于ARM官方文档。

最主要的区别就是增加了 LPI 这个中断类型,是基于消息的中断。

一般 IRQ 和 FIQ 都会有一个物理线,会给 CPU 核一个物理信号,代表中断到来。LPI 不一样,它是基于消息的机制,写寄存器就会发一个消息中断,是 ARM 在为未来布局,以后会出一些 server 的产品,独享中断号。

GIC-v3 逻辑图总结如下:

GIC -v2 架构寄存器:

来源于 GIC-v2 手册最后几页:

这里的 alias 别名很有意思,说明了这个寄存器是干嘛的:

GIC -v3的寄存器不一样,是 ICC_ 、ICV_ 、ICH_ 系列寄存器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RTX4060Ti上演史诗级尴尬,线下核心商区斩获个位数销量

时隔两年半,一代甜品 RTX 3060 Ti 显卡继任者 RTX 4060 Ti 终于上架了。 经过几天网上对比测试,情况就这么个情况,综合性能提升堪堪 10% 左右,价格上涨至 3199 元起。 来源:clubic 参考 RTX 4090 超 50% 性能提升&am…

聊聊 220V交流 过零检测

聊聊过零检测,以及如何实现过零检测 ...... by 矜辰所致目录 前言一、什么是过零检测1.1 为何需要过零检测 二、如何做过零检测2.1 光耦2.2 比较器/运放2.3 三极管/MOS管2.4 过零检测芯片 三、过零检测电路结语 前言 最近正好项目需求遇到需要做过零检测&#xff…

【刷题之路Ⅱ】LeetCode 1823. 找出游戏的获胜者(约瑟夫问题)

【刷题之路Ⅱ】LeetCode 1823. 找出游戏的获胜者 一、题目描述二、解题1、方法1——单向环形链表1.1、思路分析1.2、代码实现 2、方法2——队列2.1、思路分析2.2、先将队列实现一下2.3、代码实现 一、题目描述 原题连接: 1823. 找出游戏的获胜者 题目描述&#xff…

Java基础篇 | Java基础语法

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: Java从入门到精通 ✨特色…

2023年上半年网络工程师上午真题及答案解析

1.固态硬盘的存储介质是( )。 A.光盘 B.闪存 C.软盘 D.磁盘 2.虚拟存储技术把( )有机地结合起来使用,从而得到一个更大容量的“内存”。 A.内存与外存 B.Cache与内存 C.寄存器与Cache D.Cache与外存 3.下列接口协议中&…

论文阅读 —— 语义激光SLAM

文章目录 点云语义分割算法1 基于点的方法2 基于网格的方法3 基于投影的方法 一、SLOAM1.1 语义部分1.2 SLAM部分1.2.1 树的残差1.2.2 地面的残差1.2.3匹配过程 二、SSC: Semantic Scan Context for Large-Scale Place Recognition2.1 两步全局语义ICP2.1.1 快速偏航角计算2.1.…

【已解决---ChatGPT学术优化下载安装问题集锦】

文章目录 问题1:关于配置完项目后关闭,如何再次打开快速启动。问题2:项目链接打不开,是404。问题3:出现关于API的报错。问题4:[Local Message] Request timeout. Network error. Please check proxy settings in confi…

8.Ansible Variables介绍

什么是Ansible Variables? 就像任何其他脚本或编程语言一样,变量用于存储变化的值。例如, 假设我们要尝试执行相同的操作, 将修补程序应用于数百台服务器。我们只需要一个playbook就可以满足所有100台服务器的需求。但是,…

chatgpt赋能python:Python中提取指定元素——一个简单而精细的方法

Python中提取指定元素——一个简单而精细的方法 在网页抓取中,经常需要提取特定元素,例如标题、段落、图片等,以便于后续的数据处理与分析。而Python则是许多工程师在此领域中的首选语言,其灵活的语法和强大的第三方库给爬虫和数…

idea怎么搭建springboot

一般来说,用IDEA创建SpringBoot项目有两种方式。其一是Spring官网提供了一个快速生成SpringBoot项目的网站,可以在官网直接下载后,再导入IDEA中。另外一种是直接用IDEA创建一个SpringBoot项目,一般开发也是用的这种方式进行创建。…

为什么串行接口速率比并行接口快?

串行接口的速率会比并行快,可以从下面四个方面考虑: ①高速串口不需要时钟信号来同步数据流,也就没有时钟周期性的边沿,频谱不会集中,所以噪声干扰少很多。 以PCIE和SATA为例,时钟信息通过8b/10b编码已经集…

正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?

本文主要介绍如何使用MOVESYNC指令快速实现单轴/多轴同步跟随功能,适用于XYZ(R)、SCARA、DELTA等常见机械结构,在流水线点胶、流水线产品分拣、流水线产品搬运等场景中广泛应用。 阅读本文,学习同步跟随的原理和实现方…

抖音seo源码系统开发服务商选择

“账号矩阵”是一种账号运营的高阶玩法,指一个运营主体同时开设多个平台多个账号利用品牌联动的形式来实现账号之间的相关引流,以账号组的形式实现企业营销价值最大化。那么运营多个账号,短视频平台内容是核心,势必要招募多个剪辑…

RK平台使用IO指令

简介 RK平台开发过程经常要用到IO指令,主要是用来读写CPU各个模块寄存器的值,从而实现在线调试。 RK平台的SDK默认有包含IO指令的源码,如果执行的时候找不到指令,可能是没有编译进去,找到对应的编译脚本编译进去即可。…

Dream音频芯片开发虚拟环绕声算法概论

1 项目需求 2 开发平台介绍 Dream S.A.S France公司网站:https://www.dream.fr Dream全系列的芯片包含SAM2000 series ICs、SAM3000 series ICs以及SAM5000 series ICs。 SAM5000 series ICs包括 sam5504、sam5704、sam5708、sam5808、sam5716、sam5916。 目前drea…

为什么电源纹波那么大?

某用户在用500MHz带宽的示波器对其开关电源输出5V信号的纹波进行测试时&#xff0c;发现纹波和噪声的峰峰值达到了900多mV&#xff08;如下图所示&#xff09;&#xff0c;而其开关电源标称的纹波的峰峰值<20mv。虽然用户电路板上后级还有LDO对开关电源的这个输出再进行稳压…

出学校干了 5 年外包,已经废了

如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟 本科大专&#xff0c;17年通过校招进入某软件公司做测试&#xff0c;干了接近5年的功能。 今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经…

Spring面向切面编程(AOP)

Spring面向切面编程&#xff08;AOP&#xff09; 概念 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;利用一种称为"横切"的技术&#xff0c;剖开封装的对象内部&#xff0c;并将那些影响了多个类的公共行为封装到…

DICOM笔记-CT图像的边界

常见CT图像在有效范围内都是有效CT值。 对CT值的处理也就仅限于做斜率和截距的线性处理&#xff1b; 可参加常用的DICOM标签信息&#xff1a; DICOM笔记-DICOM常用Tag标签汇总_dicom tag列表_黑山老妖的博客的博客-CSDN博客文件引言MetaInfoGroupElementTag Description中文解…

尚无忧货运物流app系统享集运转运uniapp系统

物流货运app系统 找货源 找车源 查找货源 开通会员 开创性的物流货运管理云系统&#xff0c;将货运环节中的制造商、承运商、司机和收货方链接在同一平台&#xff0c;轻松管理运输。 <template> <diy ref"diy" v-if"isDiy"></diy&…