中断是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 语言编译器是不对堆栈溢出进行检查的。 响应中断时,单中断源标志中断请求的中断请求标志位自动复位。多中断源标志则需要软件进行复位。