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

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

[复制链接]
alan_bach 发布时间:2014-4-1 15:58
STM32编程入门之 编译器KEIL MDK的数据类型及两个重要关键词7 d; W+ ]1 ]+ X' e5 z" \2 T4 D# ?
$ ]( l1 `5 r" n: h# k
NVIC优先级+软件中断(SWIER)+软件仿真+硬件仿真(JTAG)+中断延迟3 [/ |. T6 E" }6 ^0 u
" G: _# {6 h7 h$ z) g* {6 x  w
+ a8 C% B% ~- z1 F# L" w
这篇文章本人写一2011年,当时为了理解STM32的中断就做了个学习笔记,现在为了支持沐紫@沐紫; @, ?( p0 l2 y. t0 B' y* R& Y+ n
哥豁出去了。把挖箱底都掏出来了啊,哥准备连发三篇,哈哈2篇已完成了。; J0 m* b  y# q; T

$ E9 Z# n1 c: [) R4 R- [
首先来说说两个概念,

% g; }& z0 D! V' \
1、NVIC的优先级概念
% ~0 G: \; P% \, m( x; o抢占式优先级 (pre-emption priority):
5 w- W2 E' H/ w4 \高占先式优先级的中断事件会打断当前的主程序/中断程序运行— —抢断式优先响应,俗称中断嵌套。
% y3 C1 L* P* j9 I1 x* c3 g7 }
/ N3 T+ B. k6 L5 _: D' X6 A

4 f3 z1 \/ M3 z! W/ F
2、副优先级(subpriority): 2 ]: P* I: u% e
在占先式优先级相同的情况下,高副优先级的中断优先被响应; & ^7 r% Z0 A- D3 t( O
在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才 能得到响应——非抢断式响应(不能嵌套)。
% `6 W# P/ @: j: D0 P& l  E
总结:I: 关于抢占优先级,它总是与中断被嵌套相关连.比如说在A中断中嵌套了B中断.B能打断A中断,B中断就一定属于抢占优先级了.

2 s% c) f# k3 x* G6 I/ y
II: 关于副优先级,个人认为它与中断嵌套无关,它不能被嵌套.) j4 s6 W2 K' b& w9 ~
2、判断中断是否会被响应的依据 - M- J! j$ \2 K5 _) m
首先是占先式优先级,其次是副优先级; + \( O: F# ~+ I$ w/ ^0 H  y* }
占先式优先级决定是否会有中断嵌套; / J9 g  F4 U/ ^
Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。
, Q5 E: A1 ]5 K9 Q9 C
接着简单了解一下中断优先级(NVIC.)

4 s% P8 A: W7 W7 E8 N
STM32嵌套向量中断控制器(NVIC)中断优先级理解

/ o, w1 o  a9 i3 J- J8 ?
CM3内核寄存器

; E8 K& @: S% R# e8 d2 Q
AIRCR——应用程序中断及复位控制寄存器地址(0XE000-ED0C)
0 G) b8 r7 f& N9 Z$ E& r$ q
AIRCR是个32位寄存器,其中第8,9,10位为PRIGROUP 优先级分组设置位。见表1

$ ~( U/ j# o* k' [/ ?9 X
表1 AIRCR寄存器图
1 `1 S0 Q7 ?% g) E) K
            
31
5 B1 B$ Q* U- E; U- I: |& ^
            
            
…………

3 \% |$ z) \/ T" |            
            
10
8 ~& G$ w7 U+ `
            
            
9
9 W$ ]4 Q4 d0 ]; ~5 @: t# k$ z
            
            
8

2 r1 T, j7 N( P0 i            
            
………

# e( C3 r1 H& @% s8 N, M3 C( ?% g: P            
            
0
9 i' N! ^" J: J
            

- o+ \) V8 L  \4 m' T, x/ I, z2 G0 J* j0 ]

' t0 l2 d# N# L2 B- ?7 Z
表2为PRIGROUP[2:0] 即AIRCR 8,9,10位

- h9 i9 e$ J/ V
            
PRIGROUP

' y0 e) \1 e% l  {& @$ l/ b            
[2:0]
1 {2 j% \4 x, j0 ~
            
            
Interrupt priority level value, PRI_N[7:4]
4 P4 Z& y# k* }4 U: \$ C( X* l
            
中断优先寄存器组PRI_N[7:4]位⑴

' Y3 u$ }1 o) E9 p; {% H) n+ B            
            
Number of

6 `8 P+ d4 }+ z2 T            
            
Binary

3 a3 c) F; b0 B5 }8 L            
point(1)

1 E3 R" s; ?) o' r! S" y- U5 ^            
二进制点位

- s1 H* U9 m0 b# m- X7 q& ~' `            
            
Group priority

9 z* @/ ?6 _* {+ |4 G6 D            
Bits

6 |4 b* ~$ F- k( R3 o, Z) n! P            
抢占优先级对应位

  E# k1 H; v) c9 ^# d            
            
Sub priority
7 M2 e/ v, t! v9 M$ d4 N/ X: o
            
Bits

7 L' l. d' [, u# u$ a. P" N            
响应优先级对应位
) l9 |3 c, R' S( w) \, |
            
            
Group
8 _' X6 k0 ]2 w; i0 G* M
            
Priorities

* v9 {0 a" [% z. `: r! V$ ~            
抢占优先级

+ |/ O/ u; {+ F6 J$ ]0 @; i' e            
            
Sub

0 `" W' T% T0 L            
Priorities

  h8 b+ ?" w1 |            
响应优先级

& [( K! j/ q# P. O! W            
            
0b011

1 f' V$ R: [9 {            
            
0bxxxx

2 o+ e( E7 S) H            
            
[7:4]
6 b5 D% y# B' F* X4 k
            
            
None

  X0 O& e' E, y7 C: a            
            
16

( |7 J' b$ U& p8 P' z            
            
None
2 O) G( `8 v& F1 m
            
            
0b100
8 m- z$ p# c. M  \  X
            
            
0bxxx.y

3 @( ^5 F/ D1 [- I1 t5 C7 C% F            
            
[7:5]
/ {! y' X- _: T: K- Q* ?7 a2 z
            
            
[4]

6 z+ P2 ~9 n' @" W            
            
8

5 V+ L7 p3 ~7 V: X            
            
2
* c8 u' ]+ o7 {  E4 W. j
            
            
0b101

) {% z! P6 `# Y5 U, c            
            
0bxx.yy

, G' l* i# h1 M# d  z1 y) B5 O            
            
[7:6]
9 P: Z' o" p* N: n+ R' }
            
            
[5:4]
5 e; O- d/ l$ ?- x# A1 X; u8 z
            
            
4
3 o: W* @9 o0 Q( f  L
            
            
4
9 i% K7 |# _; o; Q9 J
            
            
0b110

- y4 q+ q& n) T# X1 t            
            
0bx.yyy
& Z" ^* @: |3 R3 A; @. |
            
            
[7]

; O0 f$ [5 u: _5 J( B; ^4 o5 y            
            
[6:4]
8 a, C; b7 N2 {0 v7 p4 [
            
            
2
9 _! @8 T  ?4 q9 F0 @+ `
            
            
8

% z4 P: X8 N4 L. O& z            
            
0b111

, @$ n' O1 ~  a" i            
            
0b.yyyy

% K3 w" R7 J; b            
            
None

( v. m: o, q3 F  m' l& s            
            
[7:4]
7 V$ |0 H" b1 b
            
            
None
8 b  W3 z3 o, S, u$ Q: I: ]
            
            
16

- _* k$ A( \5 P! y+ b! o# z. t            

% f$ s7 L- ^- |( V5 _
表2 T 优先级分组
" Q! O) a/ i0 b8 R2 K
表2注释⑴说明:
$ w$ `" ~8 ^) @
关于中断优先寄存器组PRI_N[7:4]位, PRI_N在CM3内核中为PRI_1~PRI_249.在STM32103XX中可屏蔽中断为60个.所以PRI_N为PRI_1~PR1_59.
, J4 z3 i6 |+ @2 r
而实际上在MDK里的STM32库文件把PRI_N定义为32位的寄存器组IPR[ 15].
: V3 v- w$ D; A" \# V
即IPR[ 0]~ IPR[ 14],每一维元素因为有32位.(每个中断8位配置优先级)所以每一
5 k& B2 f% \" y
元素可以配置4个中断.比如说IPR[ 0]的位(31:23)配置中断A,(23:15)配

8 J2 _9 {9 {& A) q7 K; @
中断B,(15:7)配置中断C,(7:0)配置中断D。就是说每8位配置一个中断,那么其实这8位中,STM32只用了高4位来配置中断优先级别,低4位无效。

& n& F8 L0 o, L' k
注意STM3210XX系列只用了4位来表示优先级别.所以STM3210XX系列最多优先中断级别为16级。

( Z0 J6 ~5 y$ t0 t
2^4=16级。

0 m4 h% d$ g* _3 `9 x
如果上面的一段话对初学者理解还有点迷糊的话,我们看一下下面的图就应该很清楚了。

+ P. C: [9 X3 V, z6 p
结合STM32库文件表达:就是SCB->AIRCR配置--------》IP[0]。
; P5 e1 Z5 Z9 x7 Q6 ]- E7 l
这里有一个歧义AIRCR配置--------》IPR[0]是对整个32位IPR[0]四个中断同时配置呢?还是可以对IPR[0]中的四个中断分别设置,个人觉得可以分别独立配置

4 X: y9 r+ k, l! g
表2真值表就是具体配置STM32中断级优先级别了。

. `$ q. O' D! ?2 y8 u: H( d% _3 y$ [/ Z
3 P* H( O0 t& ~3 @7 k7 I: l& M- p
参考1:表2来自ST官方资料,STM32F10xxx Cortex-M3编程手册-英文版.pdf第135页。

* f( O" b" |; `  _( O4 ?$ y5 V
参考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发表:+ v* o. g* a2 ?) n5 d
过来支持一把楼主 
+ h2 b* L) L: K1 a9 }  k$ F, m
+ F2 u6 B& D! ^" g# B谢谢沐版主
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
谢谢分享,不错,真是太棒了!: m( ^1 r8 Y+ }, O1 v- a; a+ ?
哈哈先生105 回答时间:2017-8-27 17:02:21
谢谢分享
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版