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

【经验分享】STM32中断控制的流程

[复制链接]
STMCU小助手 发布时间:2022-1-16 17:24
对于 STM32 讲(还是以Timer2例),外部中断通道位置 28(35 号优先级)是给外部设备 TIME2 的,但 TIME2本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢) 、输入捕获、输出匹配、DMA 申请等。所有TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢?
3 j' g* X! Z5 ^  D& H  s" f9 r/ }9 d
4 G( V5 o8 ]+ j& {! c. @    1.因为cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总的控制该中断通道。它们包括有:1 A, y/ t$ d% i2 p
  • 中断优先级控制字:PRI_n(前面有提到过)
  • 中断允许设置位:在 ISER 寄存器中
  • 中断允许清除位:在 ICER 寄存器中
  • 中断悬挂 Pending(排队等待)位置位:在 ISPR 寄存器中(类似于置中断通道标志位)
  • 中断悬挂 Pending(排队等待)位清除:在 ICPR 寄存器中(用于清除中断通道标志位)
  • 正在被服务(活动)的中断(Active)标志位:在 IABR 寄存器中, (只读,可以知道当前内核正在处理哪个中断通道)
    3 S  |; U/ x/ O2 P+ R" M2 u7 B
     2.作为外围设备 TIME2 本身也包括更具体的,管理自己不同中断的中断控制器(位) ,它们主要是自身各个不同类型中断的允许控制位, 和各自相应的中断标志位 (STM32 的手册中有详细的说明) 。/ @6 k7 d" P6 r8 h

7 C6 C2 t: ~! I" o4 Z! B  T9 t% Y3 i8 B1 w# b
        理解上面两点之后,我们可以全程、全面和综合的来了解 TIME2 的中断过程,以及如何控制的。5 g, h" `0 M" z
         ①初始化过程0 n% c( m; @: m( K& E! }. O3 P
  • 首先要设置寄存器 AIRC 中 PRIGROUP 的值, 规定系统中的抢先优先级和子优先级的个数(在 4 个 bits 中占用的位数) ;
  • 设置 TIME2 本身的寄存器,允许相应的中断,如允许 UIE(TIME2_DIER 的第[0]位)
  • 设置 TIME2 中断通道的抢先优先级和子优先级(IP[28],在 NVIC 寄存器组中)
  • 设置允许 TIME2 中断通道。在 NVIC 寄存器组的 ISER 寄存器中的一位。5 E% |: K8 v6 }0 f( A- |: E
         ②中断响应过程
6 Q  j* W( P4 D7 h; u+ {0 O
  • 当 TIME2 的 UIE 条件成立(更新,上溢或下溢) ,硬件将 TIME2 本身寄存器中 UIE 中断标志置位,然后通过 TIME2 中断通道向内核申请中断服务。
  • 此时内核硬件将 TIME2 中断通道的 Pending 标志置位(相当与中断通道标志置位) ,表示 TIME2 有中断申请。
  • 如果当前有中断在处理,TIME2 的中断级别不够高,那么就保持 Pending 标志,当然用户可以在软件中通过写 ICPR 寄存器中相应的位把本次中断清除掉。
  • 当内核有空,开始响应 TIME2 的中断,进入 TIME2 的中断服务。此时硬件将 IABR 寄存器中相应的标志位置位, 表示 TIME2 中断正在被处理。 同时硬件清除 TIME2 的 Pending 标志位。* o2 i2 q3 c# I; }9 O' s

: n$ C6 o, g6 }9 N5 I4 }5 s9 \" m③ 执行 TIME2 的中断服务程序
, t- H9 u. G8 I1 n+ H4 {
  • 所有 TIME2 的中断事件, 都是在一个 TIME2 中断服务程序中完成的, 所以进入中断程序后, 中断程序需要首先判断是哪个 TIME2 的具体事件的中断, 然后转移到相应的服务代码段去。
  • 注意不要忘了把该具体中断事件的中断标志位清除掉, 硬件是不会自动清除 TIME2 寄存器中具体的中断标志位的。
  • 如果 TIME2 本身的中断事件多于 2 个, 那么它们服务的先后次序就由用户编写的中断服务决定了。换句话说,对于 TIME2 本身的多个中断的优先级,系统是不能设置的。所以用户在编写服务程序时,应该根据实际的情况和要求,通过软件的方式,将重要的中断优先处理掉。
  • 当然你也可以每次中断服务只处理其中的一个,然后再次进入中断,处理下一个。
    3 l1 ~/ K( S5 G# J9 o
. ?+ n7 E. r# R$ N" U, I
; f( a5 m! h1 E, J6 B
④中断返回
+ Y4 x9 m6 L9 H; Y$ J/ S内核执行完中断服务后,便进入中断返回过程,在这个过程中需要:
2 a6 [5 c) D4 d. [
  • 硬件将 IABR 寄存器中相应的标志位清另,表示该中断处理完成如果 TIME2 本身还有中断标志位置位,表示 TIME2 还有中断在申请,则重新将 TIME2的 Pending 标志置为 1,等待再次进入 TIME2 的中断服务。
  • 以上中断过程在《ARM Cortex-M3 权威指南》中有详细描述,并配合时序图说明,可以参考。
  • 然后,就可以在 ST 提供的函数库的帮助下,正确的设置和使用 STM32 的中断系统了。
    1 q% \' H0 v/ ~" P. k8 ?. c

6 U$ o3 g+ m6 r. m) k# j

) Z/ K/ n8 ~8 z
收藏 评论0 发布时间:2022-1-16 17:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版