【Day12】:NVIC中断概要

STM32的中断很强大,每个外设都可以产生中断,在这里我们先大略的讲解中断的概念,等之後在各个章节中,我们会再解释如何让各个外设进入中断。

中断是什麽?

以前在写Arduino的程序的时候,我们就是把程序放在loop内,把你要做的所有事情放在里面,这会衍伸出一个问题,那就是你一次只能做一件事!这听起来很像废话,但这确实导致了一些麻烦事。例如你想要每隔10ms对气泵的压力作测量,那假设你把侦测的函式写在STM32的while(相当於Arduino的loop)当中,你就很难做到控制侦测的频率,因为这相当於单晶片的效能有多好,甚至你while里面做的事情多寡也会影响跑一次回圈的时间。但中断就不一样了

中断就是假设你在做某件事的过程当中,有另一件事更重要必须要先做,你就会中断你现在正在做的事,先去做其他事,做完再回来,理想上应将程序分配在中断当中执行,这样可以更好的做到任务的排程。另外STM32甚至可允许巢状中断,也就是在中断的时候还可以再中断。

虽然我不是很理解这个名字的意思,但我们还是稍微提一下,NVIC全称为Nested Vectored Interrupt Controller,中文译为嵌套向量中断控制器

优先级定义

假如有两个地方同时发起中断请求,这个时候就必须决定要先做哪一个,优先级的分组是由中断优先级暂存器NVIC_IPRX(在F429中,x=0~90)来配置外部中断的优先级,原则上每个外部中断可配置的优先级为0~255,数值越小优先级越高。但是因为精简化的设计,实际上支持的优先级会减少,在F429中,只使用了bit4~bit7,如下图:
https://ithelp.ithome.com.tw/upload/images/20210910/20141525iCdmEPeYGP.jpg

优先级分组

表达优先级的那四个bit,又被分成抢暂优先级(主优先级)与子优先级。如果有许多中断同时发起请求,主优先级高的就会抢暂主优先级低的优先执行,如果主优先级相同则先比子优先级,如果两个优先级都相同,就比较他们的中断编号,编号小的优先执行。
优先级的分组是由程序中断极复位控制暂存器AIRCR的PRIGROUP[10:8]位决定([10:8]的意思就是某一个暂存器的第8个bit到第10个bit,共3个bit),F429分为了以下五组,见下表:
https://ithelp.ithome.com.tw/upload/images/20210910/20141525e7eIqC49MB.jpg
而要使用哪一个分组方式,以及修改抢暂优先级与子优先级,可以点选system core底下的NVIC进行配置,预设情况下分组方式4个bit全部都给抢暂优先级,没有子优先级。
https://ithelp.ithome.com.tw/upload/images/20210910/20141525v6UYfPHsFX.jpg
Preemption Priority为抢占优先级(主优先级);Sub Priority为子优先级


<<:  Powershell 入门之 可选参数和必选参数

>>:  [Day 11] 阿嬷都看得懂的基础 CSS 样式-图片篇

Day 08:八爪章鱼之 tmux 快捷键

今天的 Home 目录没有修改,https://github.com/simba-fs/2021-...

[ Day:29 ] GitHub Actions 懒人部署 - 如何安装多个来源的 npm package

情境,有一包公司内部的private-pkg,要安装才能 Build ,怎麽办QAQ 建立 .npm...

【左京淳的JAVA WEB学习笔记】第六章 档案上传

档案上传与一般表单提交的格式不同。 一般表单提交默认enctype = "applicat...

[DAY-29] 你是谁,比你做什麽更重要

好拉~ 倒数第二天,我就来全部统整复习一下吧! 世界会改变 生命的重要本质 人生大哉问 信仰与理性...

[Day 11] 来自未来的资料 - 数据泄露(Data leakage)

一、数据泄露(Data leakage) 在男性前列腺癌数据中,有个feature叫PROSSUG,...