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

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

[复制链接]
alan_bach 发布时间:2014-4-1 15:58
STM32编程入门之 编译器KEIL MDK的数据类型及两个重要关键词
/ |5 K! S; Y! V
& y; G- B; e5 s* BNVIC优先级+软件中断(SWIER)+软件仿真+硬件仿真(JTAG)+中断延迟
- m. e, @* x5 s( W. s! B( W, \4 }3 _( O  P/ p. I1 x4 W4 u0 @6 X# [
8 j; w- v9 {- ^  e
这篇文章本人写一2011年,当时为了理解STM32的中断就做了个学习笔记,现在为了支持沐紫@沐紫
1 n5 z0 n2 [0 T) y# `) N/ U0 A哥豁出去了。把挖箱底都掏出来了啊,哥准备连发三篇,哈哈2篇已完成了。. n5 w# R4 P' i5 y+ J8 l

$ n0 V, P% x5 X7 T0 x8 j# f" l
首先来说说两个概念,
9 s2 U6 P& }# a- |) Y! f
1、NVIC的优先级概念 6 K! e( }" L( U1 w6 r/ @& P
抢占式优先级 (pre-emption priority): 0 O0 f" m2 F& Q( \; a7 I' C+ |' E
高占先式优先级的中断事件会打断当前的主程序/中断程序运行— —抢断式优先响应,俗称中断嵌套。 7 k2 b8 J- {$ \1 w7 }, B  F! B

' q+ [$ B9 ], B
, F' a8 q# k! D! ]2 v$ n
2、副优先级(subpriority):
% r) O6 D+ N4 p在占先式优先级相同的情况下,高副优先级的中断优先被响应;
; J5 `' y- Q  a3 Z  F: ?( u在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才 能得到响应——非抢断式响应(不能嵌套)。
8 Y% f/ v; Z7 X/ U6 V4 E. o
总结:I: 关于抢占优先级,它总是与中断被嵌套相关连.比如说在A中断中嵌套了B中断.B能打断A中断,B中断就一定属于抢占优先级了.

  {& c2 M. Y* X8 X: S1 p
II: 关于副优先级,个人认为它与中断嵌套无关,它不能被嵌套.
/ s7 M& z$ k, b) _9 u
2、判断中断是否会被响应的依据
3 `  y# B* K& P4 Z! d首先是占先式优先级,其次是副优先级;
& V9 _1 W: H- L, f8 ^: `占先式优先级决定是否会有中断嵌套;
5 b- u- O4 |& i) L& ^% J2 |Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。
; F. u6 N/ v. j0 Y
接着简单了解一下中断优先级(NVIC.)
" {, e: z6 V/ v  ?
STM32嵌套向量中断控制器(NVIC)中断优先级理解

  j* i9 I) u+ v2 ~+ }. m# t4 n" t- ?
CM3内核寄存器
; L! k" U, H1 E$ k5 v* k
AIRCR——应用程序中断及复位控制寄存器地址0XE000-ED0C

. r) [! a& n4 ^# M' \
AIRCR是个32位寄存器,其中第8910位为PRIGROUP 优先级分组设置位。见表1

# L* B% |# h5 T4 n) V
1 AIRCR寄存器图

! v5 ~( _3 A( w
            
31
# L, z8 y$ r8 E& n" [
            
            
…………

* }* e9 ]$ l, r7 [2 Z2 i            
            
10
5 E' ^( E! Z6 ?3 l3 x
            
            
9
) \( i$ i% P  F2 r2 ]! v
            
            
8

- f' a3 Q0 b. k0 D* X$ z            
            
………

1 K: C& ^# }0 G# T9 a: v            
            
0
3 j( @" m0 V/ o2 u. ?* l6 l
            

) K8 n$ {: s' R- L: A  U) L) Q& L8 {' I1 `1 C( i

1 k  Y  ^) m6 P5 K
2PRIGROUP[2:0] AIRCR 8,9,10

: @* [9 w/ @4 P2 L3 t8 W. ]
            
PRIGROUP

5 K" n% ]. x/ D, t' f            
[2:0]

+ q! @+ Z) E6 P' c+ z6 q! m9 y            
            
Interrupt priority level value, PRI_N[7:4]

6 j" F& B5 n3 Q; H/ b- B            
中断优先寄存器组PRI_N[7:4]

+ F9 I& T, P; |            
            
Number of
) r, i% K+ a$ R' q) W
            
            
Binary
$ j) b( @' z/ ^8 w
            
point(1)
, q. n0 D* [7 I, E
            
二进制点位
8 q9 g5 n! h6 [
            
            
Group priority

/ C6 J8 a" V, O! k            
Bits
( C1 [& r& W+ \3 N
            
抢占优先级对应位
0 E* ^$ D8 F: ~9 \; H1 [8 p
            
            
Sub priority
+ Q; Z+ x5 @6 M# |* Q: Z% u
            
Bits

% q6 F) t8 Q+ Z            
响应优先级对应位
6 S- g6 \( t  a2 c* a6 m
            
            
Group

9 r1 ^# t9 d$ {7 C1 m3 I            
Priorities

. Y  |; e: K) `% g6 C; k6 Y$ a% w            
抢占优先级
( Z7 k0 P7 G- V: r9 m. q( |
            
            
Sub
! J8 G0 d7 m+ U+ u: P: ]# n; T
            
Priorities
" Y$ q$ ^/ M. t& N
            
响应优先级

- H- O! W( H/ C8 b5 q7 g            
            
0b011
( I# {5 O1 ]* w6 a0 ]8 y( |
            
            
0bxxxx

" J  I" a3 Q$ j; ]            
            
[7:4]

0 g$ Y! M% d$ T- D5 D5 G            
            
None

& \' G5 M7 r2 P  Y, X; E            
            
16

3 o9 ?' P9 J) z, p/ o) I0 J            
            
None
, ~" Z) q5 ]  K3 I  @
            
            
0b100

& a# ~" |' K0 x# j6 A            
            
0bxxx.y
0 u* I* r7 {9 t- r. |
            
            
[7:5]

1 y/ }: c* [/ @( D4 g/ \            
            
[4]
+ L5 Q5 Y- T1 Z* E
            
            
8
% c, v* x# z$ B
            
            
2

. {) Z. Z$ _: _0 g+ E            
            
0b101

; y/ S7 u6 O/ P! I' {            
            
0bxx.yy

; D; ^2 G  N' E% E5 q' K7 k7 A            
            
[7:6]
1 N5 i, P/ G" C8 B" N) a
            
            
[5:4]

. n3 ]' e: d  w1 v. E2 [# u  {            
            
4

  h9 w2 V& S' U! i4 J& S            
            
4
: A" V0 w1 x( k* s: @  {# q0 \; |
            
            
0b110

/ |) |, k& f6 m3 M5 f; C1 j            
            
0bx.yyy

; e3 J8 h& A/ F( E; y& {            
            
[7]
' I# A- `, M8 I0 k( l
            
            
[6:4]

) l& g* Z+ z5 \/ ~; W' `            
            
2

9 I- l0 B. k. I* ?  c, g8 E- c            
            
8
. X8 k# I1 G. |8 ^) k% P# D  H/ I
            
            
0b111
, s+ b, k( z" Y/ R1 D
            
            
0b.yyyy

4 |; ]1 q! m: x' s! \& W) ^            
            
None

* ]" g: r# g) M            
            
[7:4]

) a# @" ?# i( Y9 w' _            
            
None
6 P% M8 ?) f% R/ r6 ]1 R
            
            
16
6 b9 o8 I/ M* s. R% ]
            

9 d9 O( g* {7 P
2 T 优先级分组
1 ~0 m# |% {8 }. X' V' d
2注释⑴说明:
. |& E9 J2 ]& f3 h% S% R
关于中断优先寄存器组PRI_N[7:4], PRI_NCM3内核中为PRI_1~PRI_249.STM32103XX中可屏蔽中断为60.所以PRI_NPRI_1~PR1_59.

1 t1 T) f/ Z6 V$ _! O0 \
而实际上在MDK里的STM32库文件把PRI_N定义为32位的寄存器组IPR[ 15].

, J9 Y, {/ j+ d- d8 h3 T
IPR[ 0]~ IPR[ 14],每一维元素因为有32.(每个中断8位配置优先级)所以每一
* M0 P& s4 i& f. E- t/ w6 ?
元素可以配置4个中断.比如说IPR[ 0]的位(31:23)配置中断A,(2315)配

# ~2 g6 ^( A; y# D6 J& w
中断B,(15:7)配置中断C,(70)配置中断D。就是说每8位配置一个中断,那么其实这8位中,STM32只用了高4位来配置中断优先级别,低4位无效。
9 s+ o7 H: [' i3 d* \
注意STM3210XX系列只用了4位来表示优先级别.所以STM3210XX系列最多优先中断级别为16级。

! W/ N: J5 d% |0 g( u
2^4=16级。
' O0 Y6 m( D/ R. Y$ b" e; ?
如果上面的一段话对初学者理解还有点迷糊的话,我们看一下下面的图就应该很清楚了。

. k! ~1 H/ j9 }9 i
结合STM32库文件表达:就是SCB->AIRCR配置--------IP[0]

7 I; {4 G2 s% U; t7 B( y
这里有一个歧义AIRCR配置--------IPR[0]是对整个32IPR[0]四个中断同时配置呢?还是可以对IPR[0]中的四个中断分别设置,个人觉得可以分别独立配置
: m# x- z+ x6 [, w% i+ r  ^4 ~
2真值表就是具体配置STM32中断级优先级别了。
' S, a& {' F) {

  E" B) d$ u( v( `5 T, y+ q
5 W& p8 X) M) e% A5 @' X
参考1:表2来自ST官方资料,STM32F10xxx Cortex-M3编程手册-英文版.pdf第135页。
8 O2 w2 |% _- m
参考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发表:; A/ ]# O2 N2 s9 z0 X5 ^
过来支持一把楼主 
+ ]; c* q" `- Q. ]3 F0 j
/ t6 a# r+ L2 s8 {4 C) p0 C5 k谢谢沐版主
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
谢谢分享,不错,真是太棒了!/ t, i- E% x! c! [
哈哈先生105 回答时间:2017-8-27 17:02:21
谢谢分享

所属标签

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