STM32 嵌套向量中断控制器(NVIC)中断优先级理解
CM3内核寄存器
AIRCR——应用程序中断及复位控制寄存器 地址(0XE000-ED0C)
AIRCR是个32位寄存器,其中第8,9,10位为 PRIGROUP 优先级分组设置位。见表1
31 ………… 10 9 8 ……… 0
表1 AIRCR寄存器图
表2为PRIGROUP[2:0] 即AIRCR 8,9,10位
Interrupt priority level value, PRI_N[7:4]
中断优先寄存器组 PRI_N[7:4]位 ⑴
Number of
PRIGROUP
[2:0]
Binary
point(1)
二进制点位
Group priority
Bits
抢占优先级对
应位
Sub priority
Bits
响应优先级
对应位
Group
Priorities
抢占优先级
Sub
Priorities
响应优先级
0b011 0bxxxx [7:4] None 16 None
0b100 0bxxx.y [7:5] [4] 8 2
0b101 0bxx.yy [7:6] [5:4] 4 4
0b110 0bx.yyy [7] [6:4] 2 8
0b111 0b.yyyy None [7:4] None 16
表2 优先级分组
表 2 注释⑴说明:
关于中断优先寄存器组 PRI_N[7:4]位, PRI_N 在 CM3 内核中为 PRI_1~PRI_249.在
STM32103XX 中可屏蔽中断为 60 个.所以 PRI_N 为 PRI_1~PR1_59.
而实际上在 MDK 里的 STM32 库文件把 PRI_N 定义为 32 位的寄存器组 IPR[ 15].
即 IPR[ 0]~ IPR[ 14],每一维元素因为有 32 位.(每个中断 8 位配置优先级)所以每一
元素可以配置 4 个中断.比如说 IPR[ 0]的位(31:23)配置中断 A,(23:15)配
中断 B,(15:7)配置中断 C,(7:0)配置中断 D。就是说每 8 位配置一个中断,
那么其实这 8 位中,STM32 只用了高 4 位来配置中断优先级别,低 4 位无效。
注意 STM3210XX 系列只用了 4 位来表示优先级别.所以 STM3210XX 系列最多优先中断级别为 16 级。
2^4=16 级。
如果上面的一段话对初学者理解还有点迷糊的话,我们看一下下面的图就应该很清楚了。
结合 STM32 库文件表达:就是 SCB->AIRCR 配置--------》IP[0]。
这里有一个歧义 AIRCR 配置--------》IPR[0]是对整个 32 位 IPR[0]四个中断同时配置呢?
还是可以对 IPR[0]中的四个中断分别设置,个人觉得可以分别独立配置
表 2 真值表就是具体配置 STM32 中断级优先级别了。
表 2 来自 ST 官方
资料
新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单
,STM32F10xxx Cortex-M3 编程
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
-英文版.pdf 第 135 页。
参考理解 Cortex-M3 权威
指南
验证指南下载验证指南下载验证指南下载星度指南下载审查指南PDF
.PDF