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.hqwc.cn/news/473602.html

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

相关文章

Codeforces Round 486 (Div. 3)

目录 A. Diverse Team B. Substrings Sort C. Equal Sums D. Points and Powers of Two E. Divisibility by 25 F. Rain and Umbrellas A. Diverse Team 找出不重复的同时存下下标即可,依次遍历map判断重复最后判断数量即可 void solve(){cin>>n>>…

订餐|网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)

网上订餐系统目录 目录 基于springboot的网上订餐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能模块的实现 (1)用户注册界面 (2)用户登录界面 (3)菜品详情界面 &#xff08…

【Unity】【VR开发】针对VR项目的优化版Unity Build Settings

【背景】 编辑器中做了功能后,打包后却总会画面不满意,所以到处学习,总结成本篇,希望有用。 【准备】 本篇总结基于Unity 2021 LTS。 模板选择3D(URP) 如果URP不支持所用的部分Assets,那么也可以选择Built-in管线,不过URP肯定画面效果上要胜过Built-in。 HDRP不适用…

12.2K Star,开箱即用后台管理系统

Hi,骚年,我是大 G,公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 今天推荐一款开源免费且开箱即用的中后台管理系统,完全采用…

YOLO v5项目实战 P5 解决运行detect文件时设置了--view-img但是显示不出来的问题

up主讲的实时显示目标检测后的图片的两种方法: (1)在下面的Terminal中输入下列命令: python detect.py --view-img (2)点击进入右上方的detect的Edit Configurations 然后在这个参数这里输入 --view img…

Spring Resource

java.net.URL 类可用于访问带有各种URL前缀的资源,但是对于访问一些资源还是不够方便。比如不能从类路径或者相对于ServletContext来获取资源。而Spring 的Resource接口,则可以通过类路径等方式来访问资源。 1 Resource接口 图 Resource接口及方法 getI…

2024年2月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

09:资源利用率监控|存储卷管理

资源利用率监控|存储卷管理 资源利用率监控开启聚合服务安装metrics-server监控容器利用率 存储卷管理临时卷ConfigMap卷 存配置文件emptyDir卷 适合缓存 持久卷hostPath 卷 NFS共享卷持久卷搭建NFS服务器创建PV创建PVC 资源利用率监控 开启聚合服务 kubelet证书 在…

Excel如何把窗口冻结,在下拉滚动条的时候仍然可以看到前几行数据?

** 共分2个情况: ①: 冻结首行: 作用:只冻结第一行的数据窗口。在下拉滚动条时,首行不会动,其他数据行会动步骤如下:1、鼠标放在首行的最左边,然后左键点一下先选中整行2、然后&am…

QtApplets-线程池

QtApplets-线程池 ​ 今天咱们稍微看下Qt的线程池。QThreadPool,浅浅搞一下。 文章目录 QtApplets-线程池QThreadPoolQThreadPool 与 QThread 区别替代方案Qt Concurrent QThreadPool 与 Qt Concurrent 区别Demo运行效果 ☞ 源码 关键字: Qt、QRunnable…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(6)特征工程初步

特征工程是一个非常重要的概念,从特征工程可以领会到机器学习的真谛。 特征工程就是从原始数据转换为特征向量的过程。 特征工程的特点: 特征工程是机器学习中很重要的起始步骤,直接影响效果,需要大量的时间。 数据和特征决定了…

究极小白如何自己搭建一个自动发卡网站-独角数卡

本人从来没接触过建站,我之前都是在TB上花90叫别人给我搭建的网站,前几天这个TB店倒闭跑路了,而我的发卡网也打不开了,没办法,逼上梁山,自己捣鼓出来了!下面是2023/4/2自己建好的! …