历史上的今天

今天是:2024年09月15日(星期日)

2021年09月15日 | KST-STM32学习之中断优先级与中断嵌套

发布者:小星星龙猫 来源: eefocus关键字:KST-STM32  中断优先级  中断嵌套 手机看文章 扫描二维码
随时随地手机看文章

1、NIVC

ARM Cortex-M3 内核搭载了一个强大而方便的中断系统,称之为 NVIC(嵌套向量中断控制器)。


Cortex-M3 支持 256 个“中断通道”(16 个异常+240 个中断)以及对应的可编程 256 级中断优先级设置。


STM32 虽然采用 Cortex-M3 内核,但是只使用了其中的 84 个“中断通道”(16 个异常+68 个中断)以及 16 级中断优先级设置。


同时也记录下自己当时的一个插曲。

这里写图片描述

这个TIM6_IRQn在《STM32固件库手册》中查NVIC_IRQChannel的取值是没有的,然后咨询下老师,如下回复

这里写图片描述

再拐回头看下教程,着实一不一样

这里写图片描述

看来要不看最新的手册,要不就是直接参考头文件才行!


2、优先级及中断嵌套

优先级分为抢占优先级和响应优先级。


51所设置的优先级均属于抢占优先级,默认的便是响应优先级!


高抢占优先级可以嵌套低抢占优先级的中断。


两者抢占优先级相同,那么无论响应优先级是什么关系,这两者都没有嵌套关系。


当然不得不考虑以下极端情况:


若两个中断发生,抢占优先级相同,响应优先级不同,则根据响应优先级顺序执行(谁小谁先执行);


若两个中断发生,抢占优先级相同,响应优先级也相同,则根据中断清单表排位顺序执行(谁小谁先执行);


编程时需要注意:

首先要预先对程序的各个功能模块进行计算论证,开机初始化时一次性设置好优先级分组,以后就再也不动他了,避免同一个程序中使用多个优先级分组。


默认情况下,如何不设置中断优先级分组,则使用系统默认的优先级,即按照中断源清单的顺序执行。(没有抢占的概念,两者同时到来,谁的号小谁先执行!)。


具体的中断源清单可参考《STM32中文参考手册》9.1.2。


3、优先级分组

CM3内核中定义了8bit用于设置中断源的优先级,STM32F103只用到了其中的4个位,这4个位又被抢占优先级和响应优先级共同使用。而抢占优先级和响应优先级的级数是可以设置的,共分为5组,如下表所示。

在这里插入图片描述

怎么理解这五组呢?


这里我用**“阶级”和“阶层”**的概念进行类比抢占优先级和响应优先级。


阶级是大的分类,阶层是阶级里面的分类。


从这个概念上再来看,就不难理解了。


假如此时设置优先级分组为NVIC_PriorityGroup_4,也就是说分成了16个阶级和0个阶层!高阶级的人可以打断低阶级正在做事的人(中断嵌套),而同一阶级内不能相互打断(这个例子没有阶层,一会有具体例子)对于这个分组而言可以完成1个中断和15级嵌套。


言语的描述可能还是会有点抽象,我们来看具体的例子。优先级分组为NVIC_PriorityGroup_4,假如一个人叫TIM2_IRQn我们设置它的阶级为0(即抢占优先级为0,0~15个等级可选择),另一个人叫TIM3_IRQn我们设置它的优先级为1。按照前面所述高优先级可以打断低优先级,所以TIM2可打断TIM3!这便是嵌套的概念。


当然上面NVIC_PriorityGroup_4的例子,只是涉及了抢占优先级,并没有响应优先级,现在我们来看看加入优先级分组设置为NVIC_PriorityGroup_3会怎么样呢?按照前述的套路来分析分成了8个阶级和2个阶层!也就是说总共8个阶级,每个阶级又分两级称为阶层。还是举例来说吧,优先级分组设置为,此时有一个人叫TIM2_IRQn,我们设置它的阶级为0(抢占优先级为0,可选0~7),阶层为0(响应优先级为0,可选0-1)。还有另外一个人叫TIM3_IRQn,我们设置它的阶级为0,阶层为1。第三个人叫TIM4_IRQn,阶级为1,阶层为0。


现有如下场景:TIM3_IRQn已经发生了,然后TIM2_IRQn发生了,两者阶级一样,阶层不一样,此时抢占优先级相同,不发生嵌套,等TIM3_IRQn执行完方可再执行TIM2_IRQn。


若TIM4_IRQn发生了,然后TIM2_IRQn发生了。两者阶级不同,阶层相同,即抢占优先级不同,且TIM2_IRQn序号小,此时将打断TIM4_IRQn执行,待执行完TIM2_IRQn再回来执行TIM4_IRQn。


其他三个分析也是一样的道理。。。


emmmm,可能用阶级和阶层的概念还是不太好理解,其实生活处处是例子,也可以类比我们火车站窗口买票,有普通,军人,学生窗口 - 等同与阶级(抢占优先级),而每个窗口排队顺序 - 等同阶层(响应优先级)。


大概就是这样吧,累、、、


最后再加一段配置NVIC的代码:TIM2分组为NVIC_PriorityGroup_3,阶级为0,阶层为1。


...


NVIC_InitTypeDef NVIC_initstructure;


    NVIC_initstructure.NVIC_IRQChannel = TIM2_IRQn;           //选择TIM2中断通道

    NVIC_initstructure.NVIC_IRQChannelCmd = ENABLE;           //使能中断通道

    NVIC_initstructure.NVIC_IRQChannelPreemptionPriority = 0; //设定抢占优先级为0

    NVIC_initstructure.NVIC_IRQChannelSubPriority = 1;        //设定响应优先级为1

    NVIC_Init(&NVIC_initstructure);

    

...


小结

①、系统运行开始的时候设置中断分组。

确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为 NVIC_PriorityGroupConfig();


②. 设置所用到的中断的中断优先级别。

对每个中断调用函数为 NVIC_Init();

关键字:KST-STM32  中断优先级  中断嵌套 引用地址:KST-STM32学习之中断优先级与中断嵌套

上一篇:FlyMCU下载hex到STM32
下一篇:STM32外设资源查询方法,对比C8T6和ZET6

推荐阅读

   据澎湃新闻报道,在美国纽约举行的联想Transform 2.0大会间隙,联想集团董事长兼首席执行官杨元庆接受了媒体采访,他表示:“联想最困难的时期,打基础的阶段已经过去了,正在进入高速恢复高速增长期。”杨元庆还称,“我觉得外界有些错误的理解,认为我们只会并购,但我觉得并购是一门大学问,对于管理的要求,可能比你自己去成长还要难。”“一方...
Arm首席执行官Simon Segars表示,我们大部分产品不受美国的出口管制约束,这不会随着美国母公司的改变而改变。英伟达今日发布声明,正式宣布将以400亿美元的价格从软银手中收购Arm。根据协议,英伟达将向软银公司支付价值215亿美元的英伟达股票,以及120亿美元现金,其中包括签约时即刻支付的20亿美元。英伟达同时也确认,这笔交易不包括Arm的IoT服务。英...
经过一年多的筹备,华为nova系列新成员——华为nova 9系列将于9月23日正式发布,同时易烊千玺依然担任该系列代言人。  随着发布日期的临近,关于该系列更详细的规格参数逐渐浮出水面。  近日,据数码博主@数码闲聊站 消息,华为nova 9 Pro将配备一块10bit双打孔曲面高刷屏,主打双32MP前置Vlog镜头,后置采用戒环RYYB大底主摄,采用AG玻...

史海拾趣

问答坊 | AI 解惑

VRS51L3074地暖控制系统设计方案

一、设计思路:           1、冬天使用地暖的时候,总是不能有效的控制室内的温度,而且需要自己用手调节暖气的流通。这样使用很不方便,也不会很有效的节约能源;           2、使 ...…

查看全部问答∨

如何实现智能小车旋转固定的角度

各位前辈,小的有所不明,恳请指教... 请问要如何实现智能小车旋转固定的角度,比如左转90度等等。我的小车用的是两个减速直流电机,要如何实现比较切实可行,请说具体一点。 …

查看全部问答∨

CE6 MUX 不能加载,怪事

有个很奇怪的事情,我的平台下,mux07_10.dll死活不加载。后来我做了一个最简单空驱动,比方叫kmt驱动,生成kmt.dll,是可以加载的,但我把Kmt.dll修改成MUX.DLL,MUX07_10.DLL, MUX0710.DLL,死活就不加载。完全一模一样的代码,只修改source、def ...…

查看全部问答∨

linux 多客户端连接问题???

我用linux做客户端,win做服务器,TCP/IP协议。 连接1个客户时可以通讯,当连接上第2个客户时,第一个客户就不能通讯,而第2个可以,是什么问题呀? 好像服务器端没问题,用同是win的客户端就可以。 客户端如下: #include <stdio.h>&n ...…

查看全部问答∨

S3C2410+linux2.4下GPRS拨号能通,却PING不到外网,何解?

S3C2410+linux2.4,使用PPPD和CHAT实现GPRS拨号,手机卡是动感地带的,接入点选了CMNET PPP0的IP都已经成功分配了,为何还PING不通,默认路由也加了(route add default ppp0),何解? # ifconfig ppp0 Link encap:Point-Point Protocol inet ...…

查看全部问答∨

[请问]关键字:事件对象,DeviceIoControl

请问 WinCE下,应用程序能通过DeviceIoControl将事件对象传递给驱动程序吗?…

查看全部问答∨

请帮我分析问题原因

module hz(t1,t2,t3,t4,t5,deng1,deng2,deng3,deng4,deng5);input t1,t2,t3,t4,t5;output deng1,deng2,deng3,deng4,deng5;reg deng1,deng2,deng3,deng4,deng5;reg k1,k2,k3,k4,k5;initialbegink1=0;#1000000000 forever begin#1000000000 k1=~k1;en ...…

查看全部问答∨

电子变压器设计手册

本帖最后由 paulhyde 于 2014-9-15 02:58 编辑 电子变压器设计手册,很好的变压器学习资料,不容错过哦!  …

查看全部问答∨

lm3s系列xosc与vbat引脚可否悬空。

各位大虾,请教个问题。lm3s6911不使用冬眠模块,这时32.768晶振也就是XOSC管脚和后背电池引脚(VBAT)直接悬空可以不?会有啥不良后果吗? 谢谢!…

查看全部问答∨

Beaglebone外围电路设计之Android4.0.3 ICS的移植

起初打算使用QT来做界面,但是随着NOKIA的衰落,QT的前景也变得暗淡,关于这方面的资料也不多。 Android不仅界面华丽,而且它的功能库包含了众多开源产品,包括WebKit,OpenCore,SQlite等。 Opencore除了能解析一般的本地多媒体文件外,还提供了 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved