中断的硬件框架
往期内容
本专栏往期内容,interrtupr子系统:
- 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现
- Linux内核中IRQ Domain的结构、操作及映射机制详解
- 中断描述符irq_desc成员详解
- Linux 内核中断描述符 (irq_desc) 的初始化与动态分配机制详解
pinctrl和gpio子系统专栏:
专栏地址:pinctrl和gpio子系统
编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用
– 末片,有专栏内容观看顺序
input子系统专栏:
- 专栏地址:input子系统
- input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
– 末片,有专栏内容观看顺序I2C子系统专栏:
- 专栏地址:IIC子系统
- 具体芯片的IIC控制器驱动程序分析:i2c-imx.c-CSDN博客
– 末篇,有专栏内容观看顺序总线和设备树专栏:
- 专栏地址:总线和设备树
- 设备树与 Linux 内核设备驱动模型的整合-CSDN博客
– 末篇,有专栏内容观看顺序
1.中断路径上的3个部件
● 中断源
-
中断源指引发中断信号的硬件模块,如GPIO、定时器、串口(UART)、DMA控制器等。这些模块都有各自的寄存器,可以设置中断相关的参数,例如:
- 使能中断:启用或禁用该模块的中断功能。
- 中断状态:检查该模块是否发生了中断。
- 中断类型:设置中断的触发条件,例如上升沿触发、下降沿触发或电平触发等。
-
中断源可以根据其设置的状态来决定是否向中断控制器发送中断请求信号。
● 中断控制器
-
中断控制器汇集所有中断源的信号,将其发送至CPU。中断控制器可以:
- 设置优先级:为不同的中断源设置优先级,以便在多重中断同时发生时,确定先响应哪个中断。当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
- 向CPU发出中断信号:中断控制器根据优先级和屏蔽设置向CPU发送中断请求信号。CPU通过读取中断控制器寄存器来判断哪个中断源需要响应。
-
中断控制器的实现因芯片平台而异,例如:
- STM32F103 使用 NVIC(嵌套向量中断控制器)来处理中断。
- ARM9 平台中通常由芯片厂商设计的特定中断控制器。
- Cortex A7 采用 GIC(通用中断控制器),具有更加复杂的中断管理功能。
● CPU
- CPU会在每条指令执行后检查是否有中断请求。
- CPU内部的寄存器提供了中断的总开关,可以通过这些寄存器来使能或禁用中断,从而实现对中断响应的控制。
2.STM32F103的GPIO中断
对于GPIO中断,STM32F103又引入了External interrupt/event controller (EXTI)
。用来设置GPIO的中断类型,如下图:
对于GPIO中断,STM32F103又引入了External interrupt/event controller (EXTI)
。用来设置GPIO的中断类型,如下图:
EXTI可以给NVIC提供16个中断信号:EXTI0~EXTI15。那么某个EXTIx,它来自哪些GPIO呢?这需要设置GPIO控制器。
2.1 GPIO控制器
STM32F103的GPIO控制器中有AFIO_EXTICR1~AFIO_EXTICR4一共4个寄存器
名为:External interrupt configuration register,外部中断配置寄存器。
用来选择某个外部中断EXTIx的中断源,示例如下:
注意:从上图可知,EXTI0只能从PA0、……、PG0中选择一个,这也意味着PA0、……、PG0中只有一个引脚可以用于中断。这跟其他芯片不一样,很多芯片的任一GPIO引脚都可以同时用于中断。
2.2 EXTI
在GPIO控制器中,可以设置某个GPIO引脚作为中断源,给EXTI提供中断信号。但是,这个中断的触发方式是怎么的?高电平触发、低电平触发、上升沿触发、下降沿触发?这需要进一步设置。EXTI框图如下:
沿着上面框图中的红线,我们要设置:
- 选择哪些GPIO可以发出中断(EXITmux)
- Falling trigger selection register:是否选择下降沿触发(EventTrigger)
- Rising trigger selection register:是否选择上升沿触发(EventTrigger)
- Interrupt mask register:是否屏蔽中断,允许某个EXTI中断(Masking)
当发生中断时,可以读取下列寄存器判断是否发生了中断、发生了哪个中断:
- Pending reqeust register
要使用EXTI,流程如下:
翻译如下:
- 配置EXTI_IMR:允许EXTI发出中断
- 配置EXTI_RTSR、EXTI_FTSR,选择中断触发方式
- 配置NVIC中的寄存器,允许NVIC把中断发给CPU
2.3 NVIC
多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。处理中断时,程序可以写NVIC的寄存器,清除中断。涉及的寄存器:
我们暂时只需要关注:ISER(中断设置使能寄存器)、ICPR(中断清除挂起寄存器)。要注意的是,这些寄存器有很多个,比如ISER0、ISER1等等。里面的每一位对应一个中断。ISER0中的bit0对应异常向量表中的第16项(向量表从第0项开始),如下图:
2.4 CPU
cortex M3/M4处理器内部有这几个寄存器:
2.4.1 PRIMASK
把PRIMASK的bit0设置为1,就可以屏蔽所有优先级可配置的中断。
可以使用这些指令来设置它:
CPSIE I ; 清除PRIMASK,使能中断
CPSID I ; 设置PRIMASK,禁止中断或者:
MOV R0, #1
MSR PRIMASK R0 ; 将1写入PRIMASK禁止所有中断MOV R0, #0
MSR PRIMASK, R0 ; 将0写入PRIMASK使能所有中断
2.4.2 FAULTMASK
FAULTMASK和PRIMASK很像,它更进一步,出来一般的中断外,把HardFault都禁止了。
只有NMI可以发生。
可以使用这些指令来设置它:
CPSIE F ; 清除FAULTMASK
CPSID F ; 设置FAULTMASK或者:
MOV R0, #1
MSR FAULTMASK R0 ; 将1写入FAULTMASK禁止中断MOV R0, #0
MSR FAULTMASK, R0 ; 将0写入FAULTMASK使能中断
2.4.3 BASEPRI
BASEPRI用来屏蔽这些中断:它们的优先级,其值大于或等于BASEPRI。
可以使用这些指令来设置它:
MOVS R0, #0x60
MSR BASEPRI, R0 ; 禁止优先级在0x60~0xFF间的中断MRS R0, BASEPRI ; 读取BASEPRIMOVS R0, #0
MSR BASEPRI, R0 ; 取消BASEPRI屏蔽
3.STM32MP157的GPIO中断
STM32MP157的GPIO中断在硬件上的框架,跟STM32F103是类似的。它们的中断控制器不一样,STM32MP157中使用的是GIC:
3.1 GPIO控制器
对于STM32MP157,除了把GPIO引脚配置为输入功能外,GPIO控制器里没有中断相关的寄存器。
3.2 EXTI
GPIO引脚可以向CPU发出中断信号,所有的GPIO引脚都可以吗?不是的,需要在EXTI控制器中设置、选择。GPIO引脚触发中断的方式是怎样的?高电平触发、低电平触发、上升沿触发、下降沿触发?这需要进一步设置。这些,都是在EXTI中配置,EXTI框图如下:
3.2.1 设置EXITmux
选择哪些GPIO可以发出中断。只有16个EXTI中断,从EXTI0~EXTI15;每个EXTIx中断只能从PAx、PBx、……中选择某个引脚,如下图所示:
注意:从上图可知,EXTI0只能从PA0、……中选择一个,这也意味着PA0、……中只有一个引脚可以用于中断。这跟其他芯片不一样,很多芯片的任一GPIO引脚都可以同时用于中断。
通过EXTI_EXTICR1等寄存器来设置EXTIx的中断源是哪个GPIO引脚,入下图所示:
3.2.2 设置Event Trigger
设置中断触发方式:
3.2.3 设置Masking
允许某个EXTI中断:
3.2.4 查看中断状态、清中断
3.3 GIC
ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断源进行优先级排序和生成软件触发中断。它还提供对TrustZone安全性扩展的支持。GIC接受系统级别中断的产生,并可以发信号通知给它所连接的每个内核,从而有可能导致IRQ或FIQ异常发生。
3.4 GIC
CPU的CPSR寄存器中有一位:I位,用来使能/禁止中断。
可以使用以下汇编指令修改I位:
CPSIE I ; 清除I位,使能中断CPSID I ; 设置I位,禁止中断
4.IMX6ULL的GPIO中断
IMX6ULL的GPIO中断在硬件上的框架,跟STM32MP157是类似的。IMX6ULL中没有EXTI控制器,对GPIO的中断配置、控制(stm32MP157:EXIT设置EXITx的某一个引脚作为中断源,设置其中断的触发方式,设置EXITx能否中断 >>> 在GPIO控制器里配置中断引脚、中断引脚触发方式、使能GPIO中断),都在GPIO模块内部实现:
4.1 GPIO控制器
4.1.1 配置GPIO中断
每组GPIO中都有对应的GPIOx_ICR1、GPIOx_ICR2寄存器(interrupt configuration register )。每个引脚都可以配置为中断引脚,并配置它的触发方式:
4.1.2 使能GPIO中断
4.1.3 判断中断状态、清中断
4.2 GIC
ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断源进行优先级排序和生成软件触发中断。它还提供对TrustZone安全性扩展的支持。GIC接受系统级别中断的产生,并可以发信号通知给它所连接的每个内核,从而有可能导致IRQ或FIQ异常发生。
4.3 CPU
CPU的CPSR寄存器中有一位:I位,用来使能/禁止中断。可以使用以下汇编指令修改I位:
CPSIE I ; 清除I位,使能中断CPSID I ; 设置I位,禁止中断
相关文章:
中断的硬件框架
往期内容 本专栏往期内容,interrtupr子系统: 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…...
数据备份策略:企业防御的关键
数据备份是保护数据免受网络攻击的重要步骤。在从恶意软件或勒索软件攻击中恢复时,公司可以使用保存的备份将其恢复到之前的状态。但是,为了确保数据的完全安全,任何公司的备份策略都应该在其总体策略中包含多种解决方案。 根据关于创建、消…...
Baget 私有化nuget
Baget下载 1、下载运行 方法一:cmd运行 dotnet BaGet.dll --urls http://*:8002 http://localhost:8002 方法二:bat脚本运行Baget 创建Start.bat dotnet BaGet.dll --urls http://*:8002 运行Start.bat 方法三:部署成Window服务 NSSM部…...
前端函数的参数都有哪些?
在前端开发中,函数的分类可以根据不同的标准进行。以下是一些常见的函数分类方式,并附有相应的例子: 按传递方式分类: 按值传递:JavaScript 中的基本类型(如数字、字符串、布尔值)都是按值传递的…...
【CSS】什么是BFC?
块级格式化上下文(Block Formatting Context,简称BFC)是CSS布局中的一种重要概念,它决定了块级盒子如何在其容器内排列,以及浮动元素对其周围元素的影响。理解BFC可以帮助解决许多常见的网页布局问题,比如清…...
HCIP小型园区网拓扑实验
1.拓扑以及需求 2.需求分析 需要的核心技术 1、虚拟局域网(VLAN) 2、链路聚合(E-trunk) 3、多生成树协议(MSTP) 4、VLANIF三层逻辑接口 5、虚拟路由冗余协议(VRRP) 6、动态主…...
GRR测量系统的重复性和再现性
GRR(GaugeRepeatabilityandReproducibility)即测量系统的重复性和再现性,是用于评估测量系统性能的一个重要指标。以下是对GRR的详细解释: 一、定义 • 重复性(Repeatability):在相同条件下&…...
133.鸿蒙基础01
鸿蒙基础 1.自定义构建函数1. 构建函数-[Builder ](/Builder )2. 构建函数-传参传递(单向)3. 构建函数-传递参数(双向)4. 构建函数-传递参数练习5. 构建函数-[BuilderParam ](/BuilderParam ) 传递UI 2.组件状态共享1. 状态共享-父子单向2. 状态共享-父子双向3. 状态共享-后代组…...
科技查新小知识
首先科技查新是什么? 科技查新是文献检索和情报调研相结合的情报研究工作,它以文献为基础,以文献检索和情报调研为手段,以检出结果为依据,通过综合分析,对查新项目的新颖性进行情报学审查,写出有…...
docker安装portainer
1、拉取镜像 docker pull portainer/portainer-ce:latest2、执行 docker run -d --restartalways --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer/data:/data -v /data/portainer/public:/public portainer/portain…...
【Word2Vec】传统词嵌入矩阵训练方法
目录 1. Word2Vec 简介2. Word2Vec 的训练方法2.1 Skip-Gram模型2.2 CBOW(Continuous Bag of Words)模型 3. Word2Vec 中的词嵌入表示4. 训练过程中是否使用独热编码? 1. Word2Vec 简介 Word2Vec 是一种词嵌入模型,主要通过无监督…...
电脑不显示wifi列表怎么办?电脑不显示WiF列表的解决办法
有用户会遇到电脑总是不显示wifi列表的问题,但是不知道要怎么解决。随着无线网络的普及和使用,电脑无法显示WiFi列表的问题有时会让人感到困扰。电脑不显示WiFi列表是很常见的问题,但这并不意味着你无法连接到网络。不用担心,这个…...
详解 Dockerfile:从入门到实践
Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。Dockerfile 是一个文本文件,其中包含了一系列命令,用…...
随机变量的概率分布
第 5 章——概率分布 5.2 随机变量的概率分布 【例5-1】 计算期望值、方差、标准差 【代码框5-1】 计算期望值、方差、标准差 import pandas as pd import numpy as np example5_1 = pd.read_csv(./pydata/example/chap05/example5_1.csv)# 计算期望值 mymean = sum...
Kafka生产者如何提高吞吐量?
批量发送:生产者可以配置 batch.size 参数,将多个消息打包成一个批次发送。这样可以减少网络通信的次数,提高吞吐量。inger.ms:设置 linger.ms 参数,可以让生产者在发送消息前等待一段时间,以便收集更多的消…...
mysql:解决windows启动失败无报错(或长时间未响应)
前言 遇到好多次在修改配置文件后,mysql无法启动的问题了,这里给出一个可能原因的解决方案。 由于mysql需要修改配置文件,所以我在winserver2012服务器上更改了配置文件my.ini mysql5.7配置文件默认地址:C:\ProgramData\MySQL\MyS…...
【山——回文判断】
题目 代码 #include <bits/stdc.h> using namespace std; bool check(int num) {string s to_string(num);int l 0, r s.size() - 1;while (l < r){if (l && s[l] - s[l - 1] < 0)return false;if (s[l] ! s[r--])return false;}if (l && l r…...
FPGA学习笔记#7 Vitis HLS 数组优化和函数优化
本笔记使用的Vitis HLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,主要根据教程:跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记:《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…...
欧几里得算法python
一、问题描述 求最大公约数 class Fraction:def __init__(self, a, b):self.a aself.b bx self.gcd(a, b)self.a / xself.b / xdef gcd(self, a, b):while b >0:r a % ba bb rreturn adef zgs(self, a, b):x self.gcd(a, b)return a / x * bdef __add__(self, other…...
【layui】echart的简单使用
图表类型切换(柱形图和折线图相互切换) <title>会员数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a lay-href""&g…...
ios打包文件上传App Store windows工具
在苹果开发者中心上架IOS APP的时候,在苹果开发者中心不能直接上传打包文件,需要下载mac的xcode这些工具进行上传,但这些工具无法安装在windows或linux电脑上。 这里,我们可以不用xcode这些工具来上传,可以用国内的香…...
vue2项目启用tailwindcss - 开启class=“w-[190px] mr-[20px]“ - 修复tailwindcss无效的问题
效果图 步骤 停止编译"npm run dev"安装依赖 npm install -D tailwindcssnpm:tailwindcss/postcss7-compat postcss^7 autoprefixer^9 创建文件/src/assets/tailwindcss.css,写入内容: tailwind base; tailwind components; tailwind utiliti…...
mysql中数据不存在却查询到记录?
前言 首先看下面的查询语种 select * from AudioKnowledgeChatInfo where AudioId297795550566600706; 查询结果如下 看到上面的查询结果,是不是一脸懵?这audioId明显不对啊,怎么查询到了? 原因剖析 首先我们来看看数据库表…...
vue3+elementplus+虚拟树el-tree-v2+多条件筛选过滤filter-method
筛选条件 <el-inputv-model"searchForm.searchTreeValue"input"searchTreeData"style"flex: 1; margin-right: 0.0694rem"placeholder"请输入要搜索的设备"clearable/><imgclass"refresh-img"src"com_refres…...
【C#设计模式(4)——构建者模式(Builder Pattern)】
前言 C#设计模式(4)——构建者模式(Builder Pattern) 运行结果 代码 public class Computer {private string part1 "CPU";private string part2 "主板";private string part3 "内存";private string part4 "显卡";private st…...
LabVIEW实验室液压制动系统
压制动系统是许多实验设备的重要安全组件,尤其在高负荷、高速实验环境下,制动系统的性能对设备和操作人员的安全至关重要。传统的实验室液压制动系统监测方法存在数据采集实时性差、精度低、故障预警不及时等问题。为了提高实验安全性和设备运行的稳定性…...
解决:Loading class `com.mysql.jdbc.Driver‘. This is deprecated
问题:Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 解决方式ÿ…...
【寻找重复数字】——脑筋急转弯...
寻找重复数字 287. 寻找重复数 题目难度 中等 相关标签与企业信息 [相关标签] [相关企业] 题目描述 给定一个包含 n 1 n 1 n1 个整数的数组 nums,其数字都在 [ 1 , n ] [1, n] [1,n] 范围内(包括 1 1 1 和 n n n),可…...
AI基础知识
目录 1.激活函数:one: 激活函数的作用:two: sigmoid函数:three: tanh函数:four: ReLu:five: Leaky ReLU 2.Softmax函数3.优化器:one: 优化器的作用:two: BGD(批梯度下降):three: SGD(随机梯度下降):four: MBGD(Mini Ba…...
ubuntu 22.04 硬件配置 查看 显卡
ubuntu 22.04 硬件配置 查看 显卡 1. 参考文档 ubuntu 安装 nvidia 驱动 https://blog.51cto.com/u_13628828/7056095 input: HDA NVidia HDMI/DP,pcm3 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input11 input: HDA NVidia HDMI/DP,pcm7 as /devices/…...
地信的网站建设/百度关键词点击价格查询
1、测试计划 首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的ÿ…...
网站后台上传软件/优化营商环境条例解读
静默安装Oracle时提示:"[SEVERE] - Email Address Not Specified"系统环境:CentOS 6.3 x86_64 Oracle 11gR2解决办法:修改responseFile文件,将DECLINE_SECURITY_UPDATES的值设为true,如果为空系统会假设该值…...
什么叫网站建设/企业培训课程视频
我正在尝试使用Sipjs的帮助为用户设置Asterisk语音聊天,遵循SIPJS docs http://sipjs.com/guides/server-configuration/asterisk上给出的说明 . 用户已创建并已连接 . 他们可以通过Zoiper互相打电话 . 但无法通过Sipjs或SipML5调用 . 当任何人用户从Sipjs或SipMl5进…...
如何让搜索引擎快速收录网站/培训机构是干什么的
linux 第一章 硬件: (1) cpu:如Intel8086包括i386 (2) 内存:RAM (3)存储设备: 硬盘,CD-ROM,软盘和磁带 (4)输入输出设备:鼠标,键盘,调制解调器等 软件: (1) 程序:程序是计算机完成一项任务的指令的集合。 (2)数据是由程序使用或生…...
孵化器网站平台建设/腾讯域名注册官网
1.安装Keil 5,过程略。 2.去GD官网(中文名:兆易创新),选择【资料下载】【开发板资料】,选择对应的芯片型号,下载Package(我这里的芯片为GD32F103C8T6) 3.下载后解压&…...
做网站 如何 挣钱/百度指数app官方下载
“由于终端连接目前正在忙于处理一个连接断开连接复位或删除操作来源:未知作者:老黑时间:09-11-24【打印】“由于终端连接目前正在忙于处理一个连接断开连接复位或删除操作无法完成该请求的操作”的解决方法因为公测时候人数过多导致服务器终…...