中断 NVIC的概念和原理

1.什么是中断

中断: 由于中断源的触发,常规程序被打断, CPU转
而运行中断响应函数,而后又回到常规程序的执行,
这一过程叫做中断。
中断优先级的概念
在这里插入图片描述

在这里插入图片描述
中断的意义和作用在这里插入图片描述
中断处理的过程和术语
在这里插入图片描述

STM32 GPIO外部中断简图在这里插入图片描述
从反向介绍

2.NVIC基本概念

内核中NVIC的位置 核心外设!!!在内核内部
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ST公司裁剪了 中断优先级在这里插入图片描述
NVIC的内部结构
在这里插入图片描述
由NVIC控制所有中断源 可屏蔽和接受中断源 0 1 2 3… 然后进入中断仲裁 (每一个中断源的中断优先级都存储在图片上的四个bit位中)中断优先级分组详细内容在下面

NVIC寄存器介绍
在这里插入图片描述
中断使能寄存器 一共256个位 其中240个位是对应外部中断 寄存器写1就是使能(16个位保留)
中断除能寄存器 和使能寄存器的功能相反 寄存器位数一样
应用程序中断及复位控制寄存器 只有一个寄存器 一共32位 但是我们只使用位10到位8
中断优先寄存器 对应240个外部中断 一个寄存器对应的是8个位 但是stm32只使用四个位
NVIC工作原理
在这里插入图片描述
外部中断(240个里的四个) 进入内核中的NVIC 进入使能和除能寄存器 如果使能就进入IPR寄存器 除能就无法进入 再经过IPR寄存器和AIRCR寄存器的中断优先级控制
排列出中断的优先级进入CPU进行处理
而内部中断则是直接进入SHPR 寄存器(地位和IPR一样) 在进入CPU处理

中断向量表

中断向量表的概念在这里插入图片描述
就是每一个中断函数都有一个地址储存在flash的目录 当中断函数对应的中断源产生请求中断 那么系统就会去flash的目录找到对应的中断函数的地址跳转到中断函数执行 (这个目录会根据中断优先级排列各自中断函数的地址 0 1 2 3…)
在参考手册中查看中断向量表
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
其中main的等级最低 任何中断函数都可抢夺CPU使用权

stm32中断优先级基本概念

在这里插入图片描述
抢占优先级可以打断 响应优先级不可以被打断 (就比如1和2的相应优先级一样 1正在执行 2无法打断1的执行来执行 同理 1也不可以打断2正在执行的程序来执行)
如果要同时处理两个响应优先级相同的中断 就要看自然优先级
比如优先级为0就大于优先级为1 以此类推(负数比0更优先执行)

stm32中断优先级分组

STM32中断优先级分组 本来是NVIC有8个分组的 但是由于IPR只使用四个位 所以分组减少了3组 总共为5个组
在这里插入图片描述
第0组有0个抢占优先级 有16个响应优先级 第一组有2个抢占优先级 8个响应优先级
第二组有4个抢占优先级以此类推
中断优先级举例
在这里插入图片描述
如RTC和EXTI1的抢占优先级一样 响应优先级高的先执行(数字越小越先执行)
Systick和EXTI0的抢占优先级和响应优先级一样 就看自然优先级 谁小谁先执行
再举一个列子
在这里插入图片描述
第一幅图
第一条虚线是常规程序 main函数 然后收到了A的中断请求 执行A的中断函数 然后在执行A的中断函数中又收到了B的中断请求 因为B的抢占优先级高于A所以会进行中断嵌套就是在执行A的中断函数的过程中执行B的中断函数(跳转到B的中断函数) 待中断A B完成后再回到main函数中执行常规操作
第二幅图
在执行常规程序时 收到了A的中断请求 执行A的中断函数 又收到了BC的中断请求因为C的抢占优先级比B高(数字越小越高)所以先执行C的在执行B的
第三幅图
同第二幅图一样 只不过C是因为子优先级0小于1 C的子优先级更高

脉冲型中断源和电平型中断源

在这里插入图片描述
脉冲中断源不需要手动清除中断源 而电平型中断源需要手动清除
中断的四种状态
在这里插入图片描述
第三个图就是活动且挂起 就是在执行中断A的函数中 A的中断请求又一次发起在挂起状态
第四个图是A在活动 B也在活动(在B的中断函数执行的过程当中)

中断协作模型

在这里插入图片描述
由片上外设产生中断源

如何使用NVIC

标准库在这里插入图片描述
第一个函数是用来调整中断的优先级的(虚线的位置 给几个位给抢占优先级给几个位给子优先级)
第二个函数是用来选择中断源的或者屏蔽中断源的
这个函数NVIC_PriorityGroupConfig
在这里插入图片描述调用这个函数传入相应的宏定义 就可以划分抢占优先级和子优先级 在图片中划分了两个抢占优先级和两个子优先级 (如果不想发生中断嵌套就把抢占优先级划分为0)
NVIC初始化函数
在这里插入图片描述
就是声明一个结构体 然后往结构体内写值 这个值可以直接为数字也可以为宏定义 这个结构体的第一个成员就是中断源的名称 (去IRQn_Typq寻找)第二个成员是抢占优先级的值 第三个成员是子优先级的值 (比如抢占优先级的值为0 就前两个二进制位位00 然后子优先级为2 对应的二进制位为10 那四个位就为0010 中断优先级)第四个成员就是开关 使能中断

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宠物商店系统《宠物之家》,巨完善

源码下载地址 支持:远程部署/安装/调试、讲解、二次开发/修改/定制 系统分为用户端和管理员端。 截图中有些图片加载失败,是因为没有上传图片,登录管理员账号上传图片后,图片显示会变成正常。 web的宠物商城系统《宠物之家》。系…

mysql千万数据快速插入-实战

文章目录 前言环境一、配置二、效果总结 前言 数据量太大了,每天半夜要同步很大数据到 mysql 数据库,其中一张表就上2千万,总计上亿条数据。同步任务每天0点之后开始任务(因为到0之后才能统计前一天数据),…

Antv/G2 图表背景实线改为虚线

坐标轴 - Axis 文档 绘图属性 - ShapeAttrs 文档 图表背景实线改为虚线代码示例: chart.axis("value", {grid: {// 背景网格刻度线样式line: {style: {lineWidth: 0.5,lineDash: [5, 2], //虚线},},}, });未设置前页面效果: 添加代码配置&…

AutoGen 智能应用开发(一)|AutoGen 基础

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术&#xff0…

智慧社区大屏:连接社区生活的数字桥梁

随着科技的不断发展,智慧社区已经不再只是未来的概念,它已经在我们的眼前悄然崭露头角。智慧社区是一种基于数字技术的社区管理和生活方式,旨在提高社区的安全性、便利性和生活质量。而在这个数字化的社区中,智慧社区大屏起到了连…

基于Qt窗口文件新建_编辑_打开_保存_另存_剪切和复制和粘贴项目(文件操作直接套源码)

# .pro文件 QT += widgetsrequires(qtConfig(filedialog))​HEADERS = mainwindow.hSOURCES = main.cpp \ mainwindow.cppRESOURCES = sdi.qrc​# installtarget.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/sdiINSTALLS += target​…

【C++数据结构】顺序存储结构的抽象实现

文章目录 前言一、目标二、SeqList实现要点三、SeqList函数实现3.1 get函数3.2 set函数3.3 insert函数带2个参数的insert带一个参数的insert 3.4 remove函数3.5 clear函数3.6 下标运算符重载函数无const版本const版本 3.7 length函数 总结 前言 当谈到C数据结构时,…

商人宝:新版收银系统比传统的收银机有哪些优势

新版收银系统凭借安装迅速、使用便捷、升级省心等特点,正逐步替换掉传统的安装下载的C/S架构的收银系统。今天,小编为大家分享新版收银系统对比传统收银机的三大优势。欢迎大家点赞关注,以及收藏本文章,以便后续多了解。 一是网页…

Direct3D粒子系统

粒子和点精灵 粒子(是种微小的物体,在数学上通常用点来表示其模型。所以显示粒子时,使用点图元(由 D3 DPRIMITIVETYPE类型的D3 DPT POINTLIST枚举常量表示)是一个很好的选择。但是光栅化时,点图元将被映射为一个单个像素。这样就无法为我们提供很大的灵活性,因为实际应用…

centos7下安装主从仲裁三台结构的MongoDB 7.0.4

安装手册英文版在这里 https://www.mongodb.com/docs/v7.0/tutorial/install-mongodb-on-red-hat/ 我的安装过程 1)基础安装 1、创建 /etc/yum.repos.d/mongodb-org-7.0.repo文件 下面的代码复制到这个文件中,保存 [mongodb-org-7.0] nameMongoDB Re…

如何像专家一样高效使用搜索引擎?适用于百度Baidu、谷歌Google

你几乎可以在互联网上搜索到任何内容,而Google是大多数人选择搜索信息的主要途径之一。 尽管频繁地使用Google,但是大部分互联网用户都不知道如何快速和高效地使用Google搜索。 可以说使用Google是一门艺术。 想要获得正确的答案,你需要提出正确的问题。想要快速地获得正…

黑豹程序员-SpringBoot中整合knife4j接口文档

1、Knife介绍 黑豹程序员-架构师学习路线图-百科&#xff1a;Knife4j API接口文档管理 2、坐标 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.7</version&…

原神游戏干货分享:探索璃月的宝箱秘密,提高游戏资源获取效率!

《原神》是一款备受玩家喜爱的开放世界冒险游戏&#xff0c;而在游戏中获取资源是提升角色实力的重要途径。在这篇实用干货分享中&#xff0c;我们将介绍一些探索璃月地区的宝箱秘密&#xff0c;帮助你提高游戏资源获取的效率。 首先&#xff0c;璃月地区的宝箱分为普通宝箱和精…

潼南柠檬产业发展大会举行 这三个场景“柠”聚了人气

华龙网讯&#xff08;首席记者 羊华&#xff09;今&#xff08;6&#xff09;日下午&#xff0c;2023中国潼南柠檬产业发展大会正式举行。潼南区准备了“大礼包”&#xff0c;既有专业论坛峰会&#xff0c;也首发了“柠檬产业大脑”&#xff0c;还进行了招商引资集中签约&#…

机组 CPU

控制器&#xff1a;协调并控制计算机各部件执行程序的指令序列&#xff0c;其基本功能是取指令、分析指令和执行指令 功能 CPU 必须具有控制程序的顺序执行&#xff08;指令控制&#xff09;、产生完成每条指令所需的控制命令&#xff08;操作控制&#xff09;、对各种操作加…

C#,数值计算——函数计算,Dfridr的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 通过Ridders的多项式外推方法返回函数func在点x处的导数。 /// 输入值h作为估计的初始步长&#xff1b;它不需要很小&#xff0c;而是应为x上的增量&#xff0c; /// 在此增…

SpringBoot测试类启动web环境-上篇

1.坐标修改 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 2.测试类测试 说明&#xff1a;SpringBootTest()中的webEnvironment值的说明&#xff1b; 2.1不启…

数据结构-图的存储

邻接矩阵法 #define MaxVertexNum 100 //顶点数目的最大值 typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵&#xff0c;边表int vexnum,arcnum; //图的当前顶点数和边数 }MGraph;无向图 第i个顶点的度第i行&#xff08;或第…

第四章:人工智能深度学习教程-激活函数(第四节-深入理解激活函数)

什么是激活函数&#xff1f; 在人工神经网络中&#xff0c;节点的激活函数定义了该节点或神经元对于给定输入或一组输入的输出。然后将该输出用作下一个节点的输入&#xff0c;依此类推&#xff0c;直到找到原始问题的所需解决方案。 它将结果值映射到所需的范围&#xff0c;例…

Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】

目录 Redis系列-四种部署方式-单机部署主从模式【7】redis-四种部署模式单机模式主从模式数据同步的方式全量数据同步增量数据同步 Redis哨兵模式总结缺点&#xff1a;哨兵模式应用sentinel.conf配置项 REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持…