MCU中断控制

目录

一、中断相关基础知识

1、NVIC:嵌套向量中断控制器

2、可屏蔽中断和不可屏蔽中断的区别

3、中断优先级

4、常见特殊中断

二、中断相关寄存器

三、中断使用步骤:


一、中断相关基础知识

1、NVIC:嵌套向量中断控制器

(1) 它是内核的器件,M3/M4/M7 内核都是支持 256 个中断,其中编号为 1~255,而 0 表示没有异常,这里的编号单纯只是这些中断的一个序号,而不是优先级。

(2) 编号 1-15 是内核中产生的(内核中断)、而 16-255 属于来自内核外(外设中断)。并且具有256级的可编程中断设置。

(3) 然而芯片厂商一般不会把内核的这些资源全部用完,如 STM32F407 的内核中断有 10 个,中断有82 个, 具有16级可编程的中断优先级;STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个)。

(4) 注意:M3/M4/M7 内核具有256级可编程中断设置,但STM32F407只有16级可编程中断设置。

2、可屏蔽中断和不可屏蔽中断的区别

不可屏中断:不能被软件禁用的中断,如 Reset,NMI,HardFault。

3、中断优先级

对于编号为 1-3 的中断,其优先级是固定的,从 -3 到 -1;

编号为 4-255 的中断,其优先级都是可以编程的;

中断优先级分为两种,可编程不可编程,可编程的表示可以自己修改中断优先级,不可编程的就不能修改;所以说,并不是内核中断优先级要比所有可屏蔽中断优先级高,例如常见的:可以设置SysTick_Handler的中断高于或者低于一般的外设中断。

抢占优先级:抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。
响应优先级:抢占优先级相同, 响应优先级高的中断不能打断响应优先级低的中断。 

设置优先级分组,即抢占优先级占多少位,响应优先级占多少位。如果设置的位数确定了,意味着优先级分组就确定了,注意设置优先级不能超出范围,比如设置抢占优先级占两位,那抢占优先级设置范围就是0~3,设置的抢占优先级数就得在0~3这个范围。注意:数值越小,优先级越高高抢占优先级可以打断低抢占优先级,如果抢占优先级相等,则不能被打断。

4、常见特殊中断

(1) HardFault_Handler

主要作用是处理硬件故障。当系统检测到硬件故障时,例如内存错误硬件异常等,系统将调用hardfault_handler函数来处理这些错误,可以根据系统的状态和硬件故障的类型,执行不同的错误处理操作,例如重启系统、进入安全模式等。

(2) SVC_Handler

由软件触发,通常用于系统服务调用,如在RTOS中进行上下文切换。

触发SVC,开始第一个任务,即把第一个任务运行空间里面的存的寄存器的值按顺序加载到寄存器里,任务调度器触发了SVC中断来启动第一个任务,之后的工作都靠PendSV和SysTick中断触发来实现。

(3) PendSV_Handler

 由软件触发,通常用于RTOS中的上下文切换。

①把当前任务运行现场保存在当前任务的任务堆栈内;

②把下个要运行的任务的任务堆栈里面的内容加载到寄存器内;

③在任务切换过程中,即不允许打断中断来切换任务

(4) SysTick_Handler

SysTick_Handler是一个定时器,为操作系统提供一个时基,进行一系列操作,比如延时时切换任务等。

(5) 其它

①SysTick_Handler与PendSV_Handler 的联系:

每次触发滴答定时器中断,系统节拍中断服务程序会调用函数xTaskIncrementTick()来判断,如果该函数返回值为真(不等于pdFALSE),说明处于就绪态任务的优先级比当前运行的任务优先级高,这会触发一次PendSV中断,进行上下文切换。

②至于为什么这些操作要放在这几个中断内进行,这是因为CM3内核有两种模式:用户模式特权模式,模式不同,权限不同,有些操作需要在特权模式下进行。

(想了解的可以搜索:CM3的两种模式,两种权限,以及两个指针MSP与PSP,中断与异常)。

③一个轻量级操作系统最核心的地方就在于任务的执行切换,任务创建、调度、运行一般步骤:

a.开启系统滴答定时器

b.分配任务内存:为任务分配运行空间,把任务启动时每个寄存器里面的值按规定好的顺序存在任务分配的运行空间里;

c.加载第一个任务触发SVC,开始第一个任务,即把第一个任务运行空间里面的存的寄存器的值按顺序加载到寄存器里;

d.任务切换:系统滴答定时器中断触发,把现在寄存器内的所有值存进当前任务的运行空间里,加载下个要运行的任务运行空间里面的值到寄存器里。

二、中断相关寄存器

在 core_cm4.h 文件:

(1)ISER[8]:全称:Interrupt Set Enable Registers,这是一个中断使能寄存器组。CM4 内核支持 256 个中断,这里用 8 个 32 位寄存器来控制,每个位控制一个中断。 

(2)ICER[8]:全称:Interrupt Clear Enable Registers,是一个中断除能寄存器组。该寄存器组与 ISER 的作用恰好相反,是用来清除某个中断的使能的。 

(3)ISPR[8]:全称:Interrupt Set Pending Registers,是一个中断使能挂起控制寄存器组。每个位对应的中断和 ISER 是一样的。通过置 1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写 0 是无效的。 

(4)ICPR[8]:全称:Interrupt Clear Pending Registers,是一个中断解挂控制寄存器组。其作用与 ISPR 相反,对应位也和 ISER 是一样的。通过设置 1,可以将挂起的中断解挂。写 0 无效。 

(5)IABR[8]:全称:Interrupt Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和 ISER 一样,如果为 1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。 

(6)IP [240]:全称:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。IP 寄存器组由 240 个 8bit的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可以表示 240 个可屏蔽中断;而每个可屏蔽中断占用的 8bit 并没有全部使用,而是只用了高 4 位这 4 位,又分为抢占优先级和子优先级。抢占优先级在前,子优先级在后。 

三、中断使用步骤:

(1)设置优先级分组:

(2)设置中断号 抢占优先级 响应优先级

(3)使能中断

(4)编写中断服务函数

   1)判断中断类型

   2)清中断

   3)其它需求处理

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

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

相关文章

Windows Server 2012 评估版和Windows Server 2019 评估版 升级为正式版(工作v笔记v分享)

Windows Server 2012 评估版和Windows Server 2019 评估版是微软提供的试用版本,可以免费下载和使用一段时间。当使用评估版时,可以在适当的时候将其升级为正式版,以便继续使用并享受完整的功能。 要将评估版升级为正式版,可以按…

基于ArcGIS Pro SDK的MVVM架构

示例结果展示 文件夹创建 相对于原始C#,少了Command文件夹里的类。该文件中的RelayCommand使用 ArcGIS.Desktop.Framework Properties属性配置,主要用于设置执行程序路径(自带文件夹) DarkImages用于存放深色图片(自…

面试经典150题【1-10】

文章目录 面试经典150题【1-10】88. 合并两个有序数组27.移除元素26.删除有序数组中的重复项80.删除有序数组中的重复项II169.多数元素189.轮转数组121.买卖股票的最佳时机1122. 买卖股票的最佳时机 II55.跳跃游戏![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff…

nvm安装配置环境

前言 对于前端开发人员来说,多个项目可能用的不同的node版本,如何方便快速的转换版本,nvm版本管理工具的出现,解决这个问题。 实战 1. 搜索nvm版本,我用的1.1.2,下载后直接安装。 2.在d盘建立nvm空文件…

uniapp H5唤起手机App 中间下载页

我这里直接是打开中间下载页,在下载页判断手机是否已存在App,有则唤起App,没有则可点击下载按钮下载app。 唤起App的关键语句是:window.location.href scheme Scheme链接格式样式: [scheme]://[host]/[path]?[que…

蓝桥杯:C++队列、优先队列、链表

C普通队列 算法竞赛中一般用静态数组来模拟队列,或者使用STL queue。使用C的STL queue时,由于不用自己管理队列,因此代码很简洁。队列的部分操作如下。 C优先队列 很多算法需要用到一种特殊的队列:优先队列。它的特点是最优数据…

Android下SF合成流程重学习之onMessageInvalidate

Android下SF合成流程重学习之onMessageInvalidate 引言 虽然看了很多关于Android Graphics图形栈的文章和博客,但是都没有形成自己的知识点。每次学习了,仅仅是学习了而已,没有形成自己的知识体系,这次趁着有时间,这次…

Python算法100例-1.7 最佳存款方案

完整源代码项目地址,关注博主私信’源代码’后可获取 1.问题描述2.问题分析3.算法设计4.完整的程序 1.问题描述 假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后5年中的每年年底取出1000元,到第5年时刚…

什么是生产排产管理系统?哪个最好用?

阅读本文,你将了解:一、生产排产管理系统是什么;二、生产排产管理系统的功能;三、盘点五款好用的生产排产管理系统;四、生产排产管理系统的优势。 一、生产排产管理系统是什么 生产排产,也叫生产计划排程…

人机工程学和人机交互理论:智能座舱设计

hello家人们...本人熟悉PS、Xd、Ai、Sketch、Figma、墨刀、即时设计、mastergo、Pixso等行业设计软件以及前端开发等技能,拥有10年的UI经验,我们可以通过关注评论私信交流以帮助到您解决UI工作中的烦恼!谢谢 人机工程学与人机交互理论&#x…

元宇宙专题:元宇宙概念娱乐应用场景案例研究报告 - 体验驱动篇

今天分享的是元宇宙系列深度研究报告:《元宇宙专题:元宇宙概念娱乐应用场景案例研究报告 - 体验驱动篇》。 (报告出品方:艾瑞咨询) 报告共计:51页 避免刻舟求剑地探索元宇宙概念产品 对于任何一个宏大而…

常见Web安全漏洞的实际案例和攻防技术

常见Web安全漏洞的实际案例和攻防技术 1、SQL注入攻击与防范: 通过一个简单的Web应用演示SQL注入攻击,包括入侵者如何通过输入恶意SQL语句来获取敏感数据。提供相应的防范措施,包括参数化查询、ORM框架的使用等,并附上实际代码演示。Copy code # 恶意SQL注入语句的示例 SEL…

练习接口测试第一步骤

最近一段时间学了Python语言,重新学了 Java,js,html语言,CSS,linux,一堆测试工具;唉~ 在接触接口测试过程中补了很多课, 终于有点领悟接口测试的根本; 偶是…

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习,这篇我将初步学习二叉树!!(新年快乐!) 目录 二叉树 1、定义: 2、特点: 3、基本形态: 4、二叉树的种类: &…

上位机图像处理和嵌入式模块部署(cmake的使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 过去我们编写windows程序的时候,习惯上都是直接使用visual studio创建工程开发。而开发linux程序的时候,则是编写好c、cpp代…

MySQL 基础知识(九)之视图

目录 1 视图的介绍 2 视图算法 3 创建视图 4 查看视图结构 5 修改视图 6 删除视图 7 参考文档 1 视图的介绍 视图是一张并不存储数据的虚拟表,其本质是根据 SQL 语句动态查询数据库中的数据。数据库中只存放了视图的定义,通过 SQL 语句使用视图时…

去掉图片水印但是不伤原图?看完这些方法就知道了

小伙伴们,你们是不是经常在网上找一些好看的图片作为壁纸呢?有时候会遇到一些带着平台水印的图片,是不是觉得不太美观呢?别着急,其实我们可以使用一些去水印软件来将这些水印去除掉,让图片更加美观。那么&a…

Graph + LLM图数据库技术如何助力行业大语言模型应用落地

随着 AI 人工智能技术的迅猛发展和自然语言处理领域的研究日益深入,如何构建强大的大语言模型对于企业来说愈发重要,尤其是在特定行业领域中。 图数据库作为处理复杂数据结构的有力工具,为企业构建行业大语言模型提供了强大的支持。本文将探…

腾讯云4核8G服务器配置性能测评,2024更新

4核8G服务器支持多少人同时在线访问?阿腾云的4核8G服务器可以支持20个访客同时访问,关于4核8G服务器承载量并发数qps计算测评,云服务器上运行程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素&…

扫描电子显微镜(SEM)样品制备要求与方法解析

扫描电子显微镜(Scanning Electron Microscope,简称SEM)是一种强大的分析工具,广泛应用于材料科学、生物学、医学、半导体材料和化学化工等领域。SEM能够提供高分辨率的表面形貌图像,因此样品制备成为获取准确、清晰图…