访问手机版页面
stm32 中断嵌套NVIC的理解
内容导读:
1、NVIC_InitStructure结构体在misc.h文件中进行定义,编程时可查看。关于NVIC的函数都在misc.h文件中进行定义。2、中断服务函数入口名称在startup_stm32f10x_hd.s文件中。3、 中断结构参数NVIC_InitStructure.NVIC_

1、NVIC_InitStructure结构体在misc.h文件中进行定义,编程时可查看。关于NVIC的函数都在misc.h文件中进行定义。

2、中断服务函数入口名称在startup_stm32f10x_hd.s文件中。

3、 中断结构参数NVIC_InitStructure.NVIC_IRQChannel的值在stm32f10x.h文件中查找。

4、中断服务函数名称必须按照startup_stm32f10x_hd.s文件中中断向量表的名称进行编写,中断服务函数可以放在任意一个文件夹中,与存放位置无关。

NVIC对中断优先级进行管理,并且设置中断线。

NVIC_IRQChannelPreemptionPriority:先占优先级

NVIC_IRQChannelSubPriority:从优先级

高先占优先级中断可以打断低先占优先级的中断,即可中断嵌套。

先占优先级号码越小优先级越高,当先占优先级号码相同时,从优先级号码起作用。

同先占优先级下的中断是不能进行嵌套的,只能根据从优先级的号码进行排队,从优先级号码即为排队号码,号码越低越靠前。

如买火车票一样,系统中设置学生、军人的优先级(先优先级)高于普通群众,学生、军人可以抢占系统通道,得到优先买票的权力,但学生、军人之间是不能进行抢占的,只能根据排队(从优先级)来决定谁可以先买到票。

先用函数NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x)决定有几个先占优先级和从优先级。NVIC_PriorityGroup_x可取如下值。

NVIC_PriorityGroup_0 => 选择第0组

NVIC_PriorityGroup_1 => 选择第1组

NVIC_PriorityGroup_2 => 选择第2组

NVIC_PriorityGroup_3 => 选择第3组

NVIC_PriorityGroup_4 => 选择第4组

举例:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel= EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//指定抢占式优先级别0,可取0-1

NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;//使能中断

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel= SPI1_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//指定抢占式优先级别1,可取0-1

NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0; // 指定从优先级别0,可取0-7NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel =USART1_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1; // 指定从优先级别1,可取0-7NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

EXTI0_IRQChannel先占优先级比SPI1_IRQChannel、USART1_IRQChannel高,所以EXTI0_IRQChannel中断可以打断正在执行的 SPI1_IRQChannel/USART1_IRQChannel中断,实现中断嵌套。

SPI1_IRQChannel、USART1_IRQChannel先占优先级相等,不能相互打断,即在执行SPI1_IRQChannel/USART1_IRQChannel中断时USART1_IRQChannel/SPI1_IRQChannel中断无法打断。同时产生SPI1_IRQChannel、USART1_IRQChannel中断时,要根据从优先级进行排队,SPI1_IRQChannel从优先级比较高,所以先执行SPI1_IRQChannel中断。


标签: nvic,STM32,中断嵌套,
来源:互联网 作者:karen 时间:2018/9/6 17:20:01
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐