关于单片机中断控制

左心房为你撑大大i 提交于 2020-03-17 22:07:54

 

1.对于 STM32 讲,外部中断通道位置 2835 号优先级)是给外部设备 TIME2 的,但 TIME2

本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢)、输入捕获、输出

匹配、DMA 申请等。所有 TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提

出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢?

 

(题外话:STM32 中的一个通用定时计数器,就比 8 位控制器(如 AVRMCS-51 就更不必说了)中 TIME

要复杂多了。学过 AVR 的,可能对输入捕获、输出匹配等还有概念,但如果你学的标准架构的 MCS-51,那

么上手 32 位可能困难就更多了。所以我一直推荐学习 8 位机应该认真的从 AVR 开始。尽管 51 有很大的市

场,价格也相对便宜,但从长远的眼光看问题,从后续掌握 32 位的使用,考虑到学生的可持续发展,AVR

应该是比较好的选择。)

 

2cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总

的控制该中断通道。它们包括有:

z    中断优先级控制字:PRI_n(上面提到的)

z    中断允许设置位:在 ISER 寄存器中

z    中断允许清除位:在 ICER 寄存器中

z    中断悬挂 Pending(排队等待)位置位:在 ISPR 寄存器中(类似于置中断通道标志位)

z    中断悬挂 Pending(排队等待)位清除:在 ICPR 寄存器中(用于清除中断通道标志位)

z    正在被服务(活动)的中断(Active)标志位:在 IABR 寄存器中,(只读,可以知道当

前内核正在处理哪个中断通道)

 

因此,与 TIME2 中断通道相关的,在 NVIC 中有 13 bits,它们是 PRI_28IP[28]),

8 bits(只用高 4 );加上中断通道允许,中断通道清除(相当禁止中断),中断通道

Pending 置位(我的理解是中断请求发生了,但当前有其它中断服务在执行,你的中断级别

又不能打断别人,所以 Pending 等待,这个应该由硬件自动置位的),中断 Pending 位清除

(可以通过软件将本次中断请求、且尚处在 Pending 状态,取消掉),正在被服务的中断

Active)标志位,各 1 bit

上面的控制字和控制位都是分布在 NVIC 的寄存器组中的,可惜在 STM32 手册中竟然不

给出任何的解释和说明。

 

3.作为外围设备 TIME2 本身也包括更具体的,管理自己不同中断的中断控制器(位),它们

主要是自身各个不同类型中断的允许控制位,和各自相应的中断标志位(这个在 STM32 的手

册中有详细的说明了)。

 

4.在弄清楚 23 两点的基础上,我们可以全程、全面和综合的来了解 TIME2 的中断过程,

以及如何控制的。

 

a/ 初始化过程

首先要设置寄存器 AIRC PRIGROUP 的值,规定系统中的抢先优先级和子优先级的个数(在 4 bits 中占用的位数);

设置 TIME2 本身的寄存器,允许相应的中断,如允许 UIETIME2_DIER 的第[0]位)

设置 TIME2 中断通道的抢先优先级和子优先级(IP[28],在 NVIC 寄存器组中)

设置允许 TIME2 中断通道。在 NVIC 寄存器组的 ISER 寄存器中的一位。

 

b/ 中断响应过程

TIME2 UIE 条件成立(更新,上溢或下溢),硬件将 TIME2 本身寄存器中 UIE 中断

标志置位,然后通过 TIME2 中断通道向内核申请中断服务。

此时内核硬件将 TIME2 中断通道的 Pending 标志置位(相当与中断通道标志置位),表

TIME2 有中断申请。

如果当前有中断在处理,TIME2 的中断级别不够高,那么就保持 Pending 标志,当然用

户可以在软件中通过写 ICPR 寄存器中相应的位把本次中断清除掉。

当内核有空,开始响应 TIME2 的中断,进入 TIME2 的中断服务。此时硬件将 IABR 寄存

器中相应的标志位置位,表示 TIME2 中断正在被处理。同时硬件清除 TIME2 Pending 标志

位。

 

c/ 执行 TIME2 的中断服务程序

所有 TIME2 的中断事件,都是在一个 TIME2 中断服务程序中完成的,所以进入中断程序

后,中断程序需要首先判断是哪个 TIME2 的具体事件的中断,然后转移到相应的服务代码段

去。

注意不要忘了把该具体中断事件的中断标志位清除掉,硬件是不会自动清除 TIME2 寄存

器中具体的中断标志位的。

如果 TIME2 本身的中断事件多于 2 个,那么它们服务的先后次序就由用户编写的中断服

务决定了。换句话说,对于 TIME2 本身的多个中断的优先级,系统是不能设置的。所以用户

在编写服务程序时,应该根据实际的情况和要求,通过软件的方式,将重要的中断优先处理

掉。

当然你也可以每次中断服务只处理其中的一个,然后再次进入中断,处理下一个。

 

d/ 中断返回

内核执行完中断服务后,便进入中断返回过程,在这个过程中需要:

硬件将 IABR 寄存器中相应的标志位清另,表示该中断处理完成

如果 TIME2 本身还有中断标志位置位,表示 TIME2 还有中断在申请,则重新将 TIME2

Pending 标志置为 1,等待再次进入 TIME2 的中断服务

 

想要获取更多嵌入式,单片机学习+VX 17727800897

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!