-
2021-01-21 17:13:48
中断响应优先级和中断处理优先级的区别
中断响应优先级是由硬件排队线路或中断查询程序的查询顺序决定的,不可动态改变;
而中断优先级可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低(屏蔽位为‘0’,对新中断开放),如果是的话,就中止正在处理的中断,转到新中断去处理,处理完后再回到刚才被中止的中断继续处理
更多相关内容 -
stm32之中断响应优先级
2021-01-17 13:59:041)中断响应分为:自然优先级、抢占优先级、响应优先级。2)抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,...A和B抢占优先级和响应优先级均一致,则谁先来就先处理谁,如果还是同时发生则由自然优先...1)中断响应分为:自然优先级、抢占优先级、响应优先级。
2)抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,其中前者是抢占优先级之间的级别划分,后者是相同抢占优先级的优先级别的划分。
中断A抢占优先级比B高,那么A的中断可以在B里面触发,忽略响应优先级;
A和B抢占优先级相同,则A、B的响应优先级决定谁先响应;
A和B抢占优先级和响应优先级均一致,则谁先来就先处理谁,如果还是同时发生则由自然优先级决定。自然优先级在数据手册 NVIC向量表中可查询到。
如果有多个相同抢占优先级的中断来了 ,那么他们不会互相打断,但是他们后续的排队会按照响应优先级排队。那么也就是说,在第一个中断没有执行完的期间内, 后续的最高级的响应优先级是被安排到最高等待位处理的;
第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。抢占式优先级别相同的中断源之间没有嵌套关系
3)中断函数说明可见上一篇记录:
https://www.cnblogs.com/anSn/p/11619048.html
-
中断优先级分组和抢占式优先级和响应优先级
2019-05-15 21:42:54STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作’亚优先级’或’副优先级’,每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级...NVIC:Nested Vectored Interrupt Controller
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作’亚优先级’或’副优先级’,每个中断源都需要被指定这两种优先级。
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:
所有8位用于指定响应优先级
最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
最高7位用于指定抢占式优先级,最低1位用于指定响应优先级
这就是优先级分组的概念。
Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:
NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:
// 选择使用优先级分组第1组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);// 使能EXTI0中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);// 使能EXTI9_5中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
要注意的几点是:
1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;
2)抢占式优先级别相同的中断源之间没有嵌套关系;
3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。
在老的MCU中,没有分组的概念,分组是为了更好地管理中断,可以将同一个优先级的任务放在同一分组里,先到先执行,同时到,按子优先级顺序执行。
NVIC_SetPriorityGrouping(NVIC_PriorityGroup_4)意味着没有子优先级,只有抢占优先级的区别,跟老MCU基本一样
NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0)意味着没有抢占优先级,只有子优先级的区别中断分组设置好以后,设置中断任务的优先级
NVIC_SetPriority(irq,pri0)
irq 表示中断号,由MCU决定
pri0 值域 0~15 根据前述分组,决定哪些位是 抢占优先级,哪些位是 子优先级
数值越低,优先级越高
当然,以上设置是在相应中断配置后,且相应中断使能的情况下才有效 -
STM32中断 抢占优先级 响应优先级
2019-06-21 17:54:22STM32中断有0-4 5个分组,对每个中断设置一个抢占优先级和响应优先级。 分组配置是在寄存器SCB->AIRCR中配置: AIRCR[10:8] IP[7:4]分配情况 分配结果 0 111 0:4 0位抢占优先级,4位响应优先级 1 ...中断管理方法
STM32中断有0-4 5个分组,对每个中断设置一个抢占优先级和响应优先级。
分组配置是在寄存器SCB->AIRCR中配置:
AIRCR[10:8] IP[7:4]分配情况 分配结果
0 111 0:4 0位抢占优先级,4位响应优先级
1 110 1:3 1位抢占优先级,3位响应优先级
2 101 2:2 2位抢占优先级,2位响应优先级
3 100 3:1 3位抢占优先级,1位响应优先级
4 011 4:0 4位抢占优先级,0位响应优先级
抢占优先级,响应优先级的区别:
有A,B两个中断程序
1. A,B的抢占优先级一样 谁的响应优先级高先执行谁
A,B的抢占优先级一样 低的响应优先级程序执行时候,不会被高响应优先级打断。
2. A的抢占优先级大于B,B执行的时候,A可以打断B。
3. 两个中断 抢占优先级 响应优先级一样 哪个中断先发生就先执行哪个
数字小的级别高 比如 0级>1级
例:中断优先级分组为2
中断5的抢占优先级为2,响应优先级1
中断2的抢占优先级为3,响应优先级0
中断8的抢占优先级为2,响应优先级0
结论: 中断8>中断5>中断2
下面这幅图是 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);函数
这个是中断参数初始化函数
typedef struct
{
uint8_t NVIC_IRQChannel;//设置中断通道
uint8_t NVIC_IRQChannelPreemptionPriority;//设置响应优先级
uint8_t NVIC_IRQChannelSubPriority;//设置抢占优先级
FunctionalState uint8_t NVIC_IRQChannelCmd;//使能、
}NVIC_InitTypeDef;
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//响应优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据上面制定的参数初始化NVIC寄存器
中断优先级设置步骤
1 void NVIC_PriorityGroupConfig(unit32_t NVIC_PriorityGroup);
整个系统执行过程中只设置一次
2 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
对每个中断设置对应的优先级
3 如果需要挂起解挂,查中断当前的激活状态,调用相关函数即可
-
51单片机中断优先级及中断嵌套
2020-07-23 16:59:41说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 -
STM32中断分配——抢占优先级与响应优先级
2019-01-25 16:51:06STM32的抢占优先级和响应优先级: 中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。这4位,又被分成了抢占优先级和响应优先级两组: ... -
STM32中断优先级和开关总中断开关
2020-08-11 08:24:16STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的... -
STM32的NVIC中断以及抢占优先级和响应优先级
2021-04-02 09:24:13一、抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个...而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中 -
stm32中断抢占优先级和响应优先级有什么区别?
2018-07-15 22:16:58抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,其中前者是对抢占优先级的级别划分,后者是相同抢占优先级的优先级别的划分。 比如:中断A抢占优先级比B高,那么A的中断可以在B里面触发,忽略响应... -
中断和优先级
2022-03-25 16:14:02《CM3权威指南》讲解的是Cortex-M3内核的整个体系,...Cortex-M3内核有256种异常和中断,其中编号1~15是系统异常, 16~256是外部中断所如此多的中断, 导致了一些新问题。 比如两个中断同时发生,应该先执行哪个中断 -
【STM32】NVIC 中断优先级管理,抢占优先级,响应优先级,中断寄存器
2021-09-15 12:08:22文章目录 抢占优先级和响应优先级 抢占 响应 NVIC 的优先级组 中断寄存器 ISER[8] ICER[8] ISPR[8] ICPR[8] IABR[8] IP[240] 中断优先级设置步骤总结 Ref. 抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一... -
STM32 EXTI外部中断及NVIC的抢占优先级和响应优先级解释
2021-01-18 21:43:15从之前的串口实验可以看出,STM32总共分为内部中断和外部中断,内部和外部的配置差别不是很大,外部中断只是多了一步,需要通过 GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数(在stm... -
中断优先级分组与抢占优先级和响应优先级的关系
2018-07-23 21:51:38之前学习嵌入式的时候不太明白中断优先级分组与抢占优先级和响应优先级的关系,比如分组为2,抢占优先级也为2,响应优先级也为2,就是不明白他们之间有什么关系,谁决定谁,总共有多少个数值可供选择。 趁着现在... -
某计算机系统共有五级中断,其中断响应优先级从高到低为
2021-07-31 06:05:01某计算机系统共有五级中断,其中断响应优先级从高到低为來源:互聯網2010-02-16 21:16:18評論分類: 電腦/網絡 >> 操作系統/系統故障問題描述:某计算机系统共有五级中断,其中断响应优先级从高到低为。但操作... -
STM32中断优先级:响应优先级(子优先级)、抢占优先级
2017-12-22 14:06:11转载于:https://blog.51cto.com/13502993/2053541 -
STM32F4中断抢占优先级和响应优先级的概念
2017-01-12 14:08:29抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性, 其属性编号越小,表明它的优先级别越高。 抢占,是指打断其它中断的属性,即因为具有这个属性,会出现嵌套中断 (在... -
51单片机中断优先级设置,中断优先级如何设置
2021-05-23 05:16:49Q1:请教高人C51单片机C语言中的中断优先级怎么设置?C51中设置中断优先级,需要对中断寄存器IP进行配置。具体值需要根据用户需要的优先级顺序进行确定,具体的设置方法就是直接写如下C语言语句:IP = 06H;// 如果5... -
STM32 NVIC中断优先级:抢占优先级&响应优先级区别
2018-02-26 19:05:36同时,对每个中断设置一个抢占优先级和一个响应优先级值。分组配置是在寄存器SCB->AIRCR中配置:抢占优先级 & 响应优先级区别:1. 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。2. ... -
中断优先级
2019-05-12 16:57:34中断优先级 文章参考:https://blog.csdn.net/huangtonggao/article/details/6441876 结论: 1)抢占优先级越小,优先级越高;相同抢占优先级的中断不能嵌套; 2)相同抢占优先级N个中断发生时,响应优先级越小的... -
STM32的中断优先级说明(抢占式与响应式优先级)
2018-03-28 22:18:24注:查看寄存器请看《ARM Cortex-M4权威指南...STM32F4 的中断分组:STM32F4 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。如下图:通过这个表,我们就可以清楚的看... -
ARM中断优先级之理解
2019-10-09 18:01:51单片机的中断分为抢占优先级和响应优先级(子优先级),中断时首先由抢占优先级决定产生哪个中断。 抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。 高的抢占式优先级可以打断低的抢占式... -
中断的优先级
2018-08-28 11:41:22关于中断的优先级有三条原则: 1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求; 2、正在进行的中断过程不能被新的同级或低行...3、正在进行的低行优优先级中断服务,能被高行优优先级中断请求中断;... -
stm32中断 抢占优先级 和 响应优先级 有什么区别
2016-04-24 10:17:00与51不同,stm32的中断分类更灵活。51只是按先后顺序大小排列互相打断。 stm32中多了响应优先级这一概念。 stm32的中断分为 1....也许会有疑问:抢占优先级相同的中断,响应优先级高的不可以打断响应优先... -
stm32入门——定时器中断和中断优先级简介
2018-11-26 00:03:09其实和开发板Systick定时器进行中断延时很相似(Stm32入门——Systick定时器),即:用psc(预分频系数)设置好定时器时钟后,arr(预装载值)在每个时钟周期内减1,当arr减为0时触发中断然后进入中断处理程序进... -
stm32的抢占优先级和响应优先级(也叫子优先级)
2019-04-25 18:30:41一、抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。 抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行... -
【STM32】中断优先级管理
2020-08-23 16:45:03CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256 级的可编程中断设置。但 STM32F4 并没有使用 CM4 内核的全部东西,而是只用了它的一部分。 STM32F40xx/STM32F41xx 总共有 92 个... -
【STM32+cubemx】0007 HAL库开发:外部中断,优先级和中断向量表
2021-11-03 22:43:46这一节我们以外部中断为例子,讲讲中断的优先级和中断向量表的知识。 1)cubemx生成代码 首先还是在cubemx中生成代码,选择器件、设置SYS(调试接口)、设置RCC(外部晶振时钟源)。 然后设置GPIO引脚,选择PC... -
STM32中断优先级的管理(NVIC)
2020-12-04 20:43:53STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。 STM32 的 68 个可屏蔽中断,在 STM32F103 系列上面,又只有 60 个(在 107 系列才有 68 个)。因为我们开发板选择的...