你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

原创--哥带你学STM32之中断入门理解——中断优先级NVIC理解

[复制链接]
alan_bach 发布时间:2014-4-1 15:58
STM32编程入门之 编译器KEIL MDK的数据类型及两个重要关键词, t1 |3 r$ r5 U6 G1 l3 W
5 ]$ u- H5 g3 K$ ]% {% S$ g
NVIC优先级+软件中断(SWIER)+软件仿真+硬件仿真(JTAG)+中断延迟6 |' O: u7 \  T2 f

* P1 n" ]( L! e9 f7 C6 r5 {! @2 ^6 Q8 F$ \$ s7 r
这篇文章本人写一2011年,当时为了理解STM32的中断就做了个学习笔记,现在为了支持沐紫@沐紫
4 ?' L- Q$ `, e哥豁出去了。把挖箱底都掏出来了啊,哥准备连发三篇,哈哈2篇已完成了。* J' x4 \2 d! q- H
  [6 B; _8 b/ Z8 K0 M0 s  }
首先来说说两个概念,
1 V* v! ]- n1 p* `7 x" x0 O
1、NVIC的优先级概念
6 B; w% x- E- T) a. B7 k- t2 o抢占式优先级 (pre-emption priority): ! A3 `7 _+ w* [# y& h& w
高占先式优先级的中断事件会打断当前的主程序/中断程序运行— —抢断式优先响应,俗称中断嵌套。
4 z& R1 y, L% [: I- l3 d
; X4 v% Q% M% l6 H

8 U% A+ d2 L) a" Q
2、副优先级(subpriority): 6 E/ Y* Z) C3 a7 u1 U* B5 ]
在占先式优先级相同的情况下,高副优先级的中断优先被响应;
9 [+ E4 r0 ?9 w# b# Y, s$ n3 b在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才 能得到响应——非抢断式响应(不能嵌套)。

+ \5 \0 i: ^: T  f  V
总结:I: 关于抢占优先级,它总是与中断被嵌套相关连.比如说在A中断中嵌套了B中断.B能打断A中断,B中断就一定属于抢占优先级了.
' l" {! o& C3 t( D$ }/ i
II: 关于副优先级,个人认为它与中断嵌套无关,它不能被嵌套.3 j- ]8 f4 H& i' s7 v) K, i
2、判断中断是否会被响应的依据
+ r' S0 [, c0 p- [6 }- @$ V首先是占先式优先级,其次是副优先级; 2 S1 m6 [; I: |# K- e, P$ R0 B
占先式优先级决定是否会有中断嵌套;
. ?$ I: R/ y( R% H7 u& CReset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。

( I% P! T3 [5 u4 q6 x9 @) S. p- P
接着简单了解一下中断优先级(NVIC.)

* y: @" t  o9 B& f  J/ h! O
STM32嵌套向量中断控制器(NVIC)中断优先级理解
6 H7 Z1 \$ N* ~: c# [
CM3内核寄存器

/ V7 I* `4 Q) N6 S7 t
AIRCR——应用程序中断及复位控制寄存器地址0XE000-ED0C

8 O* x' J4 b: `/ s  k0 z+ P1 Q5 v
AIRCR是个32位寄存器,其中第8910位为PRIGROUP 优先级分组设置位。见表1
+ u; U3 o5 u+ ^5 v4 n7 v
1 AIRCR寄存器图

/ ?1 ^& c9 d8 W( S3 u
            
31

4 k  _7 _$ a$ a0 p            
            
…………
7 C. }- r! d1 v0 @6 f1 }" Z0 e$ N4 O
            
            
10

$ Z$ @+ E: g# Y% D            
            
9

7 ^* o% c. x$ P( S- T( }+ \% K            
            
8
! U% F! Y- Q' L, b
            
            
………
/ k+ Q7 Q) h2 k3 e8 ~
            
            
0

* ~6 |. d( t6 F7 A, \) y- {            
; c( Y: n8 A" W+ o0 H# Q& Y7 j
! k3 N/ b. W* _& }
# q5 }1 F8 `9 g
2PRIGROUP[2:0] AIRCR 8,9,10
7 W2 \- @+ v# V
            
PRIGROUP
% Y& O8 j1 a, {; y* {$ b8 ~% z
            
[2:0]

9 l4 q0 r( V: p' I4 e* [  r! D            
            
Interrupt priority level value, PRI_N[7:4]
7 }8 _+ Q3 Z! O* t
            
中断优先寄存器组PRI_N[7:4]

3 {& z+ m: W% J            
            
Number of

0 A. ^$ q% R2 G& @            
            
Binary
5 G$ R: i1 ]4 r4 e0 \
            
point(1)

) A6 f% I# h; \7 ]% t5 b- `            
二进制点位
+ U  H+ D. P8 d( K* N7 {
            
            
Group priority

8 L+ N0 e. O' n- ^3 j            
Bits
5 M2 a0 v* u# p# q: v
            
抢占优先级对应位
4 K: k* m% U0 |: m
            
            
Sub priority

- X0 X2 x- f3 S2 e0 c! G; k* a8 d            
Bits
1 g+ a; J2 N7 d9 U* ^1 X% w
            
响应优先级对应位

) D& B2 I; j! m' h            
            
Group

. c1 q, E* O$ [: v- b            
Priorities

, @& {6 d4 m5 ^  l8 M            
抢占优先级
+ G6 F* |  r4 S5 M. F% |
            
            
Sub

# }! R6 L$ G: n            
Priorities
8 h. K6 f/ n  c, V! b9 s  z1 v
            
响应优先级
4 J. P* R9 I, Z& s" H! G
            
            
0b011

# n0 E7 w9 T  o0 O2 |% f) S            
            
0bxxxx

9 |9 O! N; |$ J/ J! P            
            
[7:4]

- F4 ~# ?* D  p( L& @  }; f% U: M            
            
None

! Z; S' ?) y( s8 _4 i' F, @. N; B            
            
16

* J! j6 X3 {; r3 f0 ?            
            
None

9 a0 I; l0 [+ N            
            
0b100

3 f# H. N5 w: u            
            
0bxxx.y

) w' ~. p6 @& `! |            
            
[7:5]

) R) a& a7 @. `+ |1 ]! @0 P# M8 t" s            
            
[4]
+ i( Y# X7 k5 C
            
            
8

9 a5 u. d% b# [            
            
2
9 g4 ]4 p9 w2 _& B& w2 E( L
            
            
0b101
/ q% C, s9 ~. E5 ]
            
            
0bxx.yy

6 L$ @# Y* w3 T            
            
[7:6]
5 T$ |% W9 a* c; E+ n0 B
            
            
[5:4]

) G8 Y+ J& q. X7 u. i: D$ b            
            
4

  Y5 B2 k- [% i$ \2 O/ F. l* Q5 t            
            
4
1 z: G% m+ [) h# k( x; y! |
            
            
0b110
" I  \+ A0 x& r1 Z* W5 P
            
            
0bx.yyy
6 _: K) v9 c  a9 u# t
            
            
[7]
1 r! {, l  y3 n
            
            
[6:4]

; w9 N- p8 T% ]; `& ]* J1 e            
            
2

2 e9 N% Q" g3 h3 y3 P            
            
8
0 K/ \2 l8 J' L( t9 B" u, `
            
            
0b111
1 p3 E! z; }2 o) z8 k; `9 B/ J5 c
            
            
0b.yyyy

8 p0 u% t( u) k) R) L/ O            
            
None

* C$ {0 M6 O& f" x$ y  }5 Z5 X- k: F            
            
[7:4]
! L  f6 _% R+ D
            
            
None
3 B6 z& h+ h: P* \
            
            
16
6 z* Y% o9 M1 w4 K; T/ @
            

  B8 G# H3 y% p. ]! l: b
2 T 优先级分组
% ~% _* D- p' O( {/ _6 O6 T9 T
2注释⑴说明:

  p/ a" u. c& e. v1 D) _& H$ R! n; j
关于中断优先寄存器组PRI_N[7:4], PRI_NCM3内核中为PRI_1~PRI_249.STM32103XX中可屏蔽中断为60.所以PRI_NPRI_1~PR1_59.
7 |7 _/ }3 O$ V
而实际上在MDK里的STM32库文件把PRI_N定义为32位的寄存器组IPR[ 15].
/ l6 ~) p, P. ~
IPR[ 0]~ IPR[ 14],每一维元素因为有32.(每个中断8位配置优先级)所以每一

) T6 R: f( V( |2 _0 c
元素可以配置4个中断.比如说IPR[ 0]的位(31:23)配置中断A,(2315)配

, A0 O+ R9 X! W3 v$ }# f+ V; n, N
中断B,(15:7)配置中断C,(70)配置中断D。就是说每8位配置一个中断,那么其实这8位中,STM32只用了高4位来配置中断优先级别,低4位无效。
7 [% W4 R: Q  ^' ]
注意STM3210XX系列只用了4位来表示优先级别.所以STM3210XX系列最多优先中断级别为16级。

- v: \$ C/ N3 G% w; T
2^4=16级。

( o# K( P1 [9 f. B
如果上面的一段话对初学者理解还有点迷糊的话,我们看一下下面的图就应该很清楚了。

1 P1 }8 P- h8 G( d: |( L+ V) k8 n  q
结合STM32库文件表达:就是SCB->AIRCR配置--------IP[0]
7 ]5 s- Q4 u, H) I! R2 S# p
这里有一个歧义AIRCR配置--------IPR[0]是对整个32IPR[0]四个中断同时配置呢?还是可以对IPR[0]中的四个中断分别设置,个人觉得可以分别独立配置

3 w* K# F9 V& G8 o: X
2真值表就是具体配置STM32中断级优先级别了。

% Q. |3 p, D$ K2 f, u1 L1 U* ~( }% M+ s; j* o4 b
; K1 [7 O4 J* N. m. A( N; z' h6 b
参考1:表2来自ST官方资料,STM32F10xxx Cortex-M3编程手册-英文版.pdf第135页。

, M, l) E( g* i3 n6 `- D  y: l
参考2:Cortex-M3 权威指南.PDF

STM32之中断入门理解.pdf

下载

159.2 KB, 下载次数: 461

收藏 1 评论12 发布时间:2014-4-1 15:58

举报

12个回答
沐紫 回答时间:2014-4-1 21:06:16

RE:原创--哥带你学STM32之中断入门理解——中断优先级NVIC理解

过来支持一把楼主
alan_bach 回答时间:2014-4-3 16:11:13

回复:原创--哥带你学STM32之中断入门理解——中断优先级NVIC理解

回复第 2 楼 于2014-04-01 21:06:16发表:+ u' Y1 Z4 b) x
过来支持一把楼主 . R- ?  k, e4 h5 J& v2 [

" z7 ~- v8 D/ d! o# a; Q" Z谢谢沐版主
ysdx06010302 回答时间:2014-4-19 07:48:43

回复:原创--哥带你学STM32之中断入门理解——中断优先级NVIC理解

 支持一下。谢谢
123-424225 回答时间:2014-4-20 15:34:09

回复:原创--哥带你学STM32之中断入门理解——中断优先级NVIC理解

xuexixuexi
sdddd 回答时间:2014-4-20 16:34:59

回复:原创--哥带你学STM32之中断入门理解——中断优先级NVIC理解

受教qqqqqqqqqqqqqq
nihaoshijie5188 回答时间:2017-2-1 11:15:13
stm2i 回答时间:2017-2-1 12:49:48
感谢分享!
五哥1 回答时间:2017-2-1 22:48:14
谢谢分享
wofei1314 回答时间:2017-2-6 10:11:25
谢谢分享~
jmzlzl 回答时间:2017-3-11 21:30:37
感谢分享
zbber 回答时间:2017-3-11 23:13:55
谢谢分享,不错,真是太棒了!  L+ q0 B7 p8 @9 ]) R7 H1 I
哈哈先生105 回答时间:2017-8-27 17:02:21
谢谢分享

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版