NVIC中断分组和配置

NVIC中断分组合配置

NVIC是啥?

NVIC 的全称是 Nested vectored interrupt controller,即嵌套向量中断控制器。
对于 M3/M4/M7 内核的 MCU,每个中断的优先级都是用寄存器中的 8 位来设置的。8 位的话就可
以设置 2^8 = 256 级中断,实际中用不了这么多,所以芯片厂商根据自己生产的芯片做出了调整。比如
ST 的 STM32F1xx,F4xx 和 H7 只使用了这个 8 位中的高四位[7:4],低四位取零,这样 2^4=16,只能
表示 16 级中断嵌套。
对于这个 NVIC,有个重要的知识点就是优先级分组、抢占优先级和子优先级。STM32F1xx,F4xx
和 H7 都是只使用了这个 8 位寄存器的高四位[7:4]。

优先级分组抢占优先级子优先级高 4 位使用情况描述
NVIC_PriorityGroup_00 级抢占优先级0-15 级子优先级0bit 用于抢占优先级4bit 全用于子优先级
NVIC_PriorityGroup_10-1 级抢占优先级0-7 级子优先级1bit 用于抢占优先级3bit 用于子优先级
NVIC_PriorityGroup_20-3 级抢占优先级0-3 级子优先级2bit 用于抢占优先级2bit 用于子优先级
NVIC_PriorityGroup_30-7 级抢占优先级0-1 级子优先级3bit 用于抢占优先级1bit 用于子优先级
NVIC_PriorityGroup_40-15 级抢占优先级0 级子优先级4bit 全用于抢占优先级0bit 用于子优先级

从上面的表格可以看出,STM32 支持 5 种优先级分组。系统上电复位后,默认使用的是优先级分组 0,
也就是没有抢占式优先级,只有子优先级。关于这个抢占优先级和子优先级有几点一定要说清楚。
⚫ 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中
断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。
⚫ 在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优
先被响应。
⚫ 在抢占式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被
响应的低子优先级中断执行结束后才能得到响应,即子优先级不支持中断嵌套。
⚫ Reset、NMI、Hard Fault 优先级为负数,高于普通中断优先级,且优先级不可配置。
⚫ 初学者还有一个比较纠结的问题,就是系统中断(比如:PendSV,SVC,SysTick)是不是一定比外部中断(比如 SPI,USART)要高。答案:不是的,它们是在同一个 NVIC 下面设置的。
掌握了这些基础知识基本就够用了。另外特别注意一点,配置抢占优先级和子优先级,它们合并成的4bit 数字的数值越小,优先级越高,这一点千万不要搞错了。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值