《STM32中断过程详解.doc》由会员分享,可在线阅读,更多相关《STM32中断过程详解.doc(3页珍藏版)》请在三一文库上搜索。
1、STM32中断过程详解对于STM32讲(还是以Timer2例),外部中断通道位置28(35号优先级)是给外部设备TIME2的,但TIME2本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢)、输入捕获、输出匹配、DMA申请等。所有TIME2的中断事件都是通过一个TIME2的中断通道向STM32内核提出中断申请,那么STM32中如何处理和控制TIME2和它众多的、不同的、中断申请呢?1.因为cortex_m3内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总的控制该中断通道。它们包括有:中断优先级控制字:PRI_n(前面有提到过)中断允许设置位:在ISER寄存器中中
2、断允许清除位:在ICER寄存器中中断悬挂Pending(排队等待)位置位:在ISPR寄存器中(类似于置中断通道标志位)中断悬挂Pending(排队等待)位清除:在ICPR寄存器中(用于清除中断通道标志位)正在被服务(活动)的中断(Active)标志位:在IABR寄存器中,(只读,可以知道当前内核正在处理哪个中断通道)2.作为外围设备TIME2本身也包括更具体的,管理自己不同中断的中断控制器(位),它们主要是自身各个不同类型中断的允许控制位,和各自相应的中断标志位(STM32的手册中有详细的说明)。理解上面两点之后,我们可以全程、全面和综合的来了解TIME2的中断过程,以及如何控制的。初始化过程
3、首先要设置寄存器AIRC中PRIGROUP的值,规定系统中的抢先优先级和子优先级的个数(在4个bits中占用的位数);设置TIME2本身的寄存器,允许相应的中断,如允许UIE(TIME2_DIER的第0位)设置TIME2中断通道的抢先优先级和子优先级(IP28,在NVIC寄存器组中)设置允许TIME2中断通道。在NVIC寄存器组的ISER寄存器中的一位。中断响应过程当TIME2的UIE条件成立(更新,上溢或下溢),硬件将TIME2本身寄存器中UIE中断标志置位,然后通过TIME2中断通道向内核申请中断服务。此时内核硬件将TIME2中断通道的Pending标志置位(相当与中断通道标志置位),表示
4、TIME2有中断申请。如果当前有中断在处理,TIME2的中断级别不够高,那么就保持Pending标志,当然用户可以在软件中通过写ICPR寄存器中相应的位把本次中断清除掉。当内核有空,开始响应TIME2的中断,进入TIME2的中断服务。此时硬件将IABR寄存器中相应的标志位置位,表示TIME2中断正在被处理。同时硬件清除TIME2的Pending标志位。 执行TIME2的中断服务程序所有TIME2的中断事件,都是在一个TIME2中断服务程序中完成的,所以进入中断程序后,中断程序需要首先判断是哪个TIME2的具体事件的中断,然后转移到相应的服务代码段去。注意不要忘了把该具体中断事件的中断标志位清除
5、掉,硬件是不会自动清除TIME2寄存器中具体的中断标志位的。如果TIME2本身的中断事件多于2个,那么它们服务的先后次序就由用户编写的中断服务决定了。换句话说,对于TIME2本身的多个中断的优先级,系统是不能设置的。所以用户在编写服务程序时,应该根据实际的情况和要求,通过软件的方式,将重要的中断优先处理掉。当然你也可以每次中断服务只处理其中的一个,然后再次进入中断,处理下一个。中断返回内核执行完中断服务后,便进入中断返回过程,在这个过程中需要:硬件将IABR寄存器中相应的标志位清另,表示该中断处理完成如果TIME2本身还有中断标志位置位,表示TIME2还有中断在申请,则重新将TIME2的Pending标志置为1,等待再次进入TIME2的中断服务。以上中断过程在ARMCortex-M3权威指南中有详细描述,并配合时序图说明,可以参考。然后,就可以在ST提供的函数库的帮助下,正确的设置和使用STM32的中断系统了。
链接地址:https://www.31doc.com/p-3273578.html