首页 > 编程知识 正文

stm32中断的优先级顺序,intr中断和nmi中断的区别

时间:2023-05-04 13:33:52 阅读:41232 作者:603

nvic _ irqchannelpreemptionpriority; //先排优先顺序

NVIC_IRQChannelSubPriority; //从优先顺序开始

1、两者之间的逻辑关系:先占式优先级的中断可以在低3358www.Sina.com/的中断处理期间响应。 也就是说,中断嵌套,

或者,高度为先占式优先级的中断可以嵌套在高度为先占式优先级的中断中。

如果两个中断源的先占式优先级相同,则这两个中断没有嵌套关系。 如果一个中断到来后正在处理另一个中断,则后续中断要到上一个中断先占式优先级才能处理。

如果这两个中断同时到达,则中断控制器基于他们的处理完高低来确定先处理哪一个;

如果他们的从优先级先占式优先级相等,则他们在从优先级上的排名将决定先处理哪一个。

2、了解nvic _优先级组配置(nvic _优先级组_ x )

nvic _ prioritygroupconfig (nvic _ priority group _ x )确定存在多少优先级和从属级。

3358 www.Sina.com/nvic _ priority group _0nvic _ priority group _ 1

nvic _ priority group _ 2n vic _ priority group _ 3n vic _ priority _ 4

表1

表1的第4栏表示优先顺序可以占几个二级制。

先占优先顺序第一位,从优先顺序第三位开始。

nvic _ irqchannelpreemptionpriority=x; //x可取值范围为0~1; ((0) 0到0 ~ 2^1-1) () ) ) ) ) ) ) ) ) ) ) ) ) ) 652

NVIC_IRQChannelSubPriority=y; //y取值范围为0~7; (0) 0到0 ~ 2^3-1) () ) ) ) ) ) ) ) ) ) ) ) ) ) 652

中断表

示例:

nvic _优先级组配置(nvic _优先级组_ 1;

//NVIC_PriorityGroup_1为优先级0-1,优先级0-7 nvic _ init structure.nvic _ IRQ channel=心跳的眼睛3_IRQn; //计时器3中断

nvic _ init structure.nvic _ irqchannelpreemptionpriority=0; //优先级0,选项0-1

nvic _ init structure.nvic _ irqchannelsubpriority=7; //从优先级7开始,可选为0-7

nvic _ init structure.nvic _ irqchannelcmd=enable;

nvic _ init (nvic _ init结构;

NVIC_PriorityGroup_X 可取如下值:

中断组在系统运行过程中只设置一次。 (NVIC_PriorityGroupConfig只是一个寄存器操作。 多次操作以最后的设定为准。 )

对于每个中断,设置对应的优先级和从属优先级。

如果不设置中断优先级组,则中断优先级组默认为0,即0位优先级和4位响应优先级。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。