学习之MSP430中断

jxndcl301   2012-5-30 22:40 楼主

中断是MSP430微处理器的一大特色,有效地利用中断可以简化程序和提高执行效率。

MS430 的中断比较多,几乎每个外围模块都能够产生中断。MSP430 可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU ,事件处理完毕后,CPU 再次进入低功耗状态。由于CPU 的运算速度和退出低功耗状态的速度很快,所以,在很多应用中,CPU 大部分时间都能够处于低功耗状态,这是MSP430能够如此节省电能的重要原因之一。

MSP430的中断分为:系统复位、不可屏蔽中断、可屏蔽中断。

系统复位中断向量为0xFFFE不可屏蔽中断向量为0xFFFC,产生不可屏蔽中断的原因如下:

1 RST/NMI管脚功能选择为NMI 时,RST/NMI管脚上产生一个上升沿或者下降沿(具体是上升沿还是下降沿由寄存器WDTCTL中的NMIES位决定)。NMI 中断可以用 WDTCTL中的NMIIE 位屏蔽。需要注意的是,当RST/NMI管脚功能选择为NMI 时,不要让 RST/NMI管脚上的信号一直保持在低电平。原因是如果发生了PUC ,则RST/NMI管脚的功能被初始化为复位功能,而此时它上面的信号一直保持低电平,使CPU 一直处于复位状态,不能正常工作。

2 )振荡器失效中断允许时,振荡器失效。

3 FLASH存储器的非法访问中断允许时,对FLASH存储器进行了非法访问。

不可屏蔽中断可由各自的中断允许位禁止或打开。当一个不可屏蔽中断请求被接受时,相应的中断允许位自动复位。退出中断程序时,如果希望中断继续有效,则必须用软件将相应中断允许位置位。

可屏蔽中断的中断源来自具有中断能力的外围模块,包括看门狗定时器(工作在定时器模式)溢出触发的中断。每一个中断都可以被自己的中断控制位屏蔽。也可以被全局中断控制位屏蔽。 多个中断请求发生时,MSP430选择拥有最高优先级的中断响应。响应中断时,MSP430会将不可屏蔽中断控制位SR.GIE 复位,因此,一旦响应了中断,即使有优先级更高的可屏蔽中断出现,MSP430也不会中断当前响应的中断,去响应另外的中断。SR.GIE复位不影响不可屏蔽中断,所以仍可以接受不可屏蔽中断的中断请求。

中断响应的过程为下图所示:

从中断响应和返回的过程中可以看出,如果希望在中断程序执行时仍然可以响应新的中断请求,则可以进入中断程序后将 SR.GIE置位。这样新的中断请求出现时,MSP430会中断当前的执行程序,响应最高优先级的中断请求,甚至包括刚被中断执行的中断程序的中断请求也可以再次被响应。但要注意,如果中断嵌套的层次错误,则容易发生堆栈溢出,程序的执行必定会混乱,而 C 语言编译器是不对堆栈溢出进行检查的。 响应中断时,单中断源标志中断请求的中断请求标志位自动复位。多中断源标志则需要软件进行复位。

  • 中断与堆栈
学习靠的就是努力,靠的就是坚持……

回复评论 (5)

学习了……:carnation:
点赞  2012-5-30 23:03
哈哈,谢谢楼主的心得!!!
点赞  2012-6-3 01:05
:carnation:
点赞  2012-7-24 10:26
多谢楼主
点赞  2012-7-24 11:01
如果希望在中断程序执行时仍然可以响应新的中断请求,则可以进入中断程序后将 SR.GIE置位。这样新的中断请求出现时,MSP430会中断当前的执行程序,响应最高优先级的中断请求

其实楼主这个地方理解错了,如果在进入中断程序后将SR.GIE置位,这样新的中断请求出现的时,MSP430会中断当前的中断服务程序,响应新的中断,不管新的中断优先级比当前中断优先级高还是低,都会被响应新的中断。

先前我也是这种想法,但在一次实际操作中我发现,并不是楼主说的这样。
点赞  2013-4-9 20:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复