嵌入式Linux学习(3)——中断(Interrupt)子系统概念

news2024/11/16 17:32:58

目录

一. 中断概念与分类

1.1 中断分类

1.2 中断事件的处理流程

1.3 中断号(IRQ number)

1.4 中断源(Interrupt Source)

1.5 中断触发方式

二. 中断子系统架构

2.1 GIC

2.2 中断子系统架构

2.3 GIC与IP

    2.3.1 典型GIC IP

             PLC390

             GIC 400

            GIC 500

REF


一. 中断概念与分类

中断是指 CPU 在执行程序的过程中,出现了某些突发事件急待处理,CPU 必须暂停当前程序的执 行,转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。

1.1 中断分类

有的地方也把内部中断和外部中断统称为硬中断。

中断处理:中断类型 | 东芝半导体&存储产品中国官网

1. 软中断是执行中断指令产生的,而硬中断是由外设引发的硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

2. 内部中断的中断源来自 CPU 内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助 CPU 内部的软件中断),外部中断 的中断源来自 CPU 外部,由外设提出请求。

3. 可屏蔽中断可以通过设置 中断控制器寄存器等方法被屏蔽,屏蔽后,该中断不再得到响应,而不可屏蔽中断不能被屏蔽。

4. 根据中断入口跳转方法的不同,中断可分为向量中断和非向量中断。采用向量中断的 CPU 通常为不同的中断分配不同的中断号,当检测到某中断号的中断到来后,就自动跳转到与该中断号对应的地址执行。不同中断号的中断有不同的入口地址。非向量中断的多个中断共享一个入口地址,进入该入口地址后,再通过软件判断中断标志来识别具体是哪个中断。也就是说,向量中断由硬件提供中断服务程序入口地址,非向量中断由软件提供中断服务程序入口地址。

1.2 中断事件的处理流程

收到中断事件后的处理流程:

1. 抢占当前任务:内核必须暂停正在执行的进程;

2. 执行中断处理函数(ISR):找到对应的中断处理函数,将 CPU 交给它(执行),ISR 位于 Interrupt Vector table,这个 table 位于内存中的固定地址;

3. 中断处理完成之后:第 1 步被抢占的进程恢复执行,在中断处理完成之后,处理器恢复执行被中断的进程(resume the interrupted process)。

1.3 中断号(IRQ number)

1. IRQ number:软中断号,在Linux系统中是唯一的,也是编程的时候需要用到的中断号。

2. HW interrupt ID:也称之为硬件中断号,是中断控制器用来标识外设中断的。

3. IRQ domain:负责实现硬件中断号与软件中断号的映射,通常是由芯片原厂的工程师来映射的,然后他们再将映射后的软中断号告诉我们编程人员。

1.4 中断源(Interrupt Source)

中断源类型中断号ID范围用途

SGI (Software Generated Interrupt)

软件触发中断

0~15用于多核之间的相互通信,SGI通常在Linux内核中被用作 IPI 中断(inter-processor interrupts),并会送达到系统指定的CPU上。

PPI (Private Peripheral Interrupt)

私有外设中断

16~31每个CPU私有的中断,通常会送达到指定的CPU上,应用场景有CPU本地时钟。

SPI (Shared Peripheral Interrupt)

公用外设中断/共享外设中断

32~1019此类中段是由外设触发的中断信号,比如按键、手机触摸屏触发的、串口等中断。
LIP (Locality-specific Peripheral Interrupt)基于消息的边沿中断8192 - MAXGICv3/v4中支持,它们在很多方面与其他类型的中断不同。LPI始终基于消息的中断,它们的配置保存在表中而不是寄存器。像按键/触摸等这些传统的中断都是需要管脚的,而LPI是基于消息的,直接操作寄存器,就不需要占用管脚了。比如PCIe的MSI/MSI-x中断。

1.5 中断触发方式

中断的触发方式可分为边沿触发(上升沿、下降沿)和电平触发(高电平、低电平),两种触发方式的行为有所不同。

触发方式

特点

边沿触发

在检测到上升沿或下降沿后触发中断,此后中断会一直处于触发状态,直到软件应答该中断为止

电平触发

在检测到特定电平后触发中断,电平变化或软件应答都能deassert该中断

二. 中断子系统架构

2.1 GIC

GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其Architecture Specification目前有V1~V4四个版本,V1很古老了,基本被废弃,V2最多支持8个ARM core,V3/V4支持更多的ARM core。中断控制器就是用来控制中断的,可以通过中断控制器来控制中断的开关和优先级等。

GIC 主要由两部分组成,分别是仲裁单元(Distributor)和CPU接口(Interface)模块。

(1) Distributor 检测各个中断源的状态,使能/屏蔽中断,设置中断优先级,分发各个中断源产生的中断事件分发到指定的一个或者多个 CPU interface 上等。

(2) CPU interface 连接 GIC 和 CPU 处理器。多个CPU interface 就可以连接到多核 CPU 了。

中断控制器是可以级联的,如下图所示。

由后面的 “GIC 400” 小节可知,即使是多核 CPU 也只提供了“4种窗口”,即 IRQ(普通中断模式)、FIQ (快速中断模式)、Virtual IRQ、Virtual FIQ。

2.2 中断子系统架构

如下为中断子系统的架构图,也大概说明了CPU/GIC与Linux驱动开发者的关系。

2.3 GIC与IP

新的版本都是兼容旧版本的。 

SoC(System on Chip) 是一种集成了多个功能组件和外设的芯片,它通常包含一个或多个 CPU 核心,以及其他系统组件,如内存控制器、图形处理器、输入输出接口、中断控制器、外设控制器等。这些组件都集成在同一芯片上,共享同一个物理封装和电源供应。在 ARM 体系结构中,GIC通常与其他外设集成在 SoC 中,用于处理和分发各种中断。

IP(Intellectual Property)也称为 IP 核(Intellectual Property Core),是指芯片中具有独立功能的电路模块的成熟设计。该电路模块设计可以应用在包含该电路模块的其他芯片设计项目中,从而减少设计工作量,缩短设计周期,提高芯片设计的成功率。该电路模块的成熟设计凝聚着设计者的智慧,体现了设计者的知识产权,因此,芯片行业就用 IP 核(Intellectual Property Core)来表示这种电路模块的成熟设计。IP 核也可以理解为芯片设计的中间构件。一般说来,一个复杂的芯片是由芯片设计者自主设计的电路部分和多个外购的 IP 核连接构成的。绝大多数 SOC 厂商都依赖 IP 来设计和生产一款 SOC 芯片,做 SOC 的过程其本质就是寻找,验证及整合 IP 的过程。

在这里可以通俗的理解为 GICv1~v4 都是规范,IP 是对应 GIC 规范实现的一些GIC模块,然后这些 IP 会卖给半导体厂家用来做 SoC。

2.3.1 典型GIC IP
GIC version典型IP

GIC-v2 架构

GIC 400
GIC-v3 架构

GIC 500

GIC-4 架构GIC 600
PLC390

整体框图如下

1. 单核PLC390

2. 多核PLC

GIC 400

多核 GIC 400 

  

GIC 500

GIC v3 支持了更多核这里的 CPU 直接称为 PE 了,SPI 和 PPI 接在了不同的 Distributor 上。

PE(Processing Element):指处理器系统中的一个实体,代表一个可执行指令的核心或线程。在多核处理器系统中,每个核心被视为一个独立的处理元素。每个处理元素都具有自己的寄存器集、执行单元和控制逻辑,能够独立执行指令和处理数据。 

REF

Documentation – Arm Developer

《PrimeCell Generic Interrupt Controller(PL390)》

《CoreLink GIC-400 Generic Interrupt Controller》

《ARM CoreLink GIC-500 Generic Interrupt Controller》

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

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

相关文章

Git初始

一)git的介绍: 1)假设现在有一个文档,你的老板要求你针对于这份文件进行修改,进行完成的修改的版本是版本1,接下来是文档2,修改完文档2以后,接下来老板还不同意,于是又有了文档三,文档四&#x…

海康rtsp拉流,rtmp推流,nginx部署转flv集成

海康rtsp拉流,rtmp推流,nginx部署转flv集成 项目实际使用并测试经正式使用无问题,有问题欢迎评论留言 核心后台java代码: try {// FFmpeg命令String command "ffmpeg -re -i my_video.mp4 -c copy -f flv rtmp://localho…

android11-开机自启脚本

1. 编写myshell脚本 diff --git a/device/rockchip/rk356x/ok3568_r/myshell.sh b/device/rockchip/rk356x/ok3568_r/myshell.sh new file mode 100644 index 0000000000..c78b6d93bd --- /dev/nullb/device/rockchip/rk356x/ok3568_r/myshell.sh-0,0 1,4 #!/vendor/bin/shec…

c# winform chart 单个柱形设置

目前实现到第三张图形,有可以实现四张图形的请大佬帮助。 实现到第三张图的设置如下 private void Form1_Load(object sender, EventArgs e) {// 隐藏标题//chart1.Titles.Clear();// 隐藏图例chart1.Legends.Clear();// 隐藏 Y 轴的网格线和标签chart1.ChartAreas[0].AxisY.…

论文笔记:Bilinear Attention Networks

更精简的论文学习笔记 1、摘要 多模态学习中的注意力网络提供了一种选择性地利用给定视觉信息的有效方法。然而,学习每一对多模态输入通道的注意力分布的计算成本是非常昂贵的。为了解决这个问题,共同注意力为每个模态建立了两个独立的注意分布&#x…

解决驱动模块Licence信息提示

一. 简介 上一篇文章挂载 驱动模块时,提示 驱动模块 Licence相关的信息。文章地址如下: 字符设备驱动的加载与卸载-CSDN博客 本文旨在 解决 "挂载字符驱动模块时,提示 Licence信息的提示" 这个问题。 二. 解决驱动模块Licence信…

[Toolschain cpp ros cmakelist python vscode] 记录写每次项目重复的设置和配置 不断更新

写在前面 用以前的设置,快速配置项目,以防长久不用忘记,部分资料在资源文件里还没有整理 outline cmakelist 复用vscode 找到头文件vscode debug现有代码直接关联远端gitros杂记repo 杂记glog杂记 cmakelist 复用 包含了根据系统路径找库…

0062-Java运算符

文章目录 1.运算符介绍2.算术运算符2.1 介绍2.2 细节说明 3.关系运算符(比较运算符)3.1 介绍3.2 细节说明 4.逻辑运算符4.1 介绍4.2 逻辑运算规则4.3 && 和 & 基本规则4.4 && 和 & 使用区别4.5 || 和 | 基本规则4.6 || 和 | 使用区别 5. ! 取反 基本规…

Jmeter实现性能测试--高并发

高并发场景 高并发场景是指系统在相对短时间内面对大量用户同时访问的情况。这种场景常见于在线服务、电商平台、社交网络、金融交易等需要处理大量并发请求的系统。以下是一些典型的高并发场景: 在线购物活动: 在特定促销或购物节期间,电商…

Databend 开源周报第 124 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 新增对 Delta 和…

智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鼠群算法4.实验参数设定5.算法结果6.参考文献7.MA…

VBA之Word应用:利用代码统计文档中的书签个数

《VBA之Word应用》(版权10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实…

spring 基于注解管理bean @Autowired

搭建子模块spring6-ioc-annotation ①搭建模块 搭建方式如&#xff1a;spring6-ioc-xml ②引入配置文件 引入spring-ioc-xml模块日志log4j2.xml ③添加依赖 <dependencies><!--spring context依赖--><!--当你引入Spring Context依赖之后&#xff0c;表示将…

鉴赏 tcp vegas

优秀的 vegas 之后&#xff0c;再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas。 从下图可看出所有的(对&#xff0c;所有的) aimd 都毫无伸缩性(z:吞吐&#xff0c;x:rtt&#xff0c;y:丢包率&#xff0c;由 buffer_size 直接决定)&#xff1a; 一下就可看出 rtt 和 bu…

关于折线回归

一、说明 今天的帖子主要是关于使用折线回归找到最佳值。即将某条曲线分解成包络线段&#xff0c;然后用分段回归方式优化。但它也涉及使用 SAS 和 R 的剂量反应研究和样条曲线。这不是第一篇关于这些主题的文章&#xff0c;但我确实想在其中添加折线。只是因为它还在使用。 二…

Axure中继器完成表格的增删改查的自定义元件(三列表格与十列表格)

目录 一、中继器 1.1 定义 1.2 特点 1.3 适用场景 二、三列表格增删改查 2.1 实现思路 2.2 效果演示 三、十列表格增删改查 3.1 实现思路 3.2 效果演示 一、中继器 1.1 定义 在Axure中&#xff0c;"中继器"通常指的是界面设计中的一个元素&#xff0c;用…

Redis 6 性能大揭秘:如何优化缓存命中率?

Redis 6的性能优化&#xff0c;特别是关于如何优化缓存命中率。 这篇文章会包含10个代码示例&#xff0c;帮助深入理解和应用相关的技巧 1、 监控缓存命中率 在优化之前&#xff0c;首先要了解当前的缓存命中率。Redis提供了INFO命令来查看性能指标&#xff0c;包括命中率。…

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中&#xff0c;Tensor&#xff08;张量&#xff09;是一种数据结构&#xff0c;用于存储和操作多维数组。张量可以被视为一种扩展的矩阵&#xff0c;它可以具有任意数量的维度。 在深度学习中&#xff0c;张量通常被用来表示神经网络的输入…

easylogging 的笔记

学习总结 应用在c的工程里 easylog是一个用于记录日志的工具&#xff0c;其中分出了7种级别&#xff1a;分别是INFO&#xff1b;DEBUG&#xff1b;WARNING&#xff1b;TRACE&#xff1b;VERBOSE&#xff1b;ERROR&#xff1b;FATAL。其中FATAL这个log的输出会导致程序运行的退…

剑指 Offer(第2版)面试题 41:数据流的中位数

剑指 Offer&#xff08;第2版&#xff09;面试题 41&#xff1a;数据流的中位数 剑指 Offer&#xff08;第2版&#xff09;面试题 41&#xff1a;数据流的中位数解法1&#xff1a;优先队列解法2&#xff1a;有序集合 双指针 剑指 Offer&#xff08;第2版&#xff09;面试题 41…