|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
disable_irq与disable_irq_nosync使用场景& r' [& u' c4 K/ ?3 C& o
. k f: k9 b$ q" |
Linux设备驱动,关于中断屏蔽有两个接口:disable_irq和disable_irq_nosync,该两接口使用场景如下:' E( D# ~- L1 ?
! r7 m# l8 c" P: \, I
1、disable_irq:在非中断处理函数中使用,会阻塞;' q4 G' [* l4 t
- w0 d$ k8 J/ s
2、disable_irq_nosync:在中断处理函数中使用,不会阻塞;用于屏蔽相应中断;6 n* v& _2 f! D7 E2 t
$ U+ h" s+ k, _4 z: S9 `, A6 ~# v
一、为什么要屏蔽中断? ; [& z+ C: S4 v) d3 T& @
( N& ^; U4 Z, U9 z8 ~
使能中断后,一旦触发中断,系统会进入中断处理函数;如果下一个中断触发的时候,前一个中断处理函数已经完成,这是理想状态,不会发生异常;如果前一个中断处理函数还未完成,那么就会导致中断嵌套。为了不出现中断嵌套,必须在中断处理函数中屏蔽中断,待中断处理完成后,再主动使能中断。
+ t8 \4 o. H6 [5 Q6 r# \+ }9 ^& Y: `6 u
二、disable_irq不能放在中断处理函数中" {* T4 p: R: E" x7 {
! a t7 i( u7 V' x! Z7 o
' i' F4 Y1 _3 s$ L2 F: z7 i- {! ~. \
# z7 [( G1 Z1 A& p+ n& ?0 A8 p. p
. a z) i( D1 B5 Z
6 D. r* U& o2 s: z) c U |
|