1.WDT总共有3个寄存器:WDTCTL,IE1,IFG1.
2.WDT interrupt:
看门狗有两种工作模式,watchdog mode, interval mode。
WDTIFG 置位的两种情况:在看门狗模式下发生看门狗溢出。在间隔定时模式下发生定时溢出,且全局中断使能GIE和WDTIE均开启。
WDTIFG在中断服务程序后会自动清除该标记。
3.WDTCTL
WDTPW:必须写0x5A. WDTHOLD:停止看门狗就设为1. WDTNMIES: NMI下降沿为1,上升沿为0. WDTNMI: NMI为1. WDTTMSEL:间隔定时器模式设为1. WDTCNTCL:通过该位来清除WDT计数器的值 通常设为1表示清除到0. WDTSSEL:设置时钟源 ACLK(辅助系统时钟)为1,SMCLK(子系统时钟)为0. WDTISx:设置时间间隔。0-3对应不同的分频。
4.WDT程序:
默认在中断中SR清零,也就是GIE是0,所以默认不会发生中断嵌套。只有在中断服务程序中打开GIE才能发生中断嵌套。
#include <msp430x14x.h> unsigned int i=0; void main(void) { WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms IE1 |= WDTIE; // Enable WDT interrupt P2DIR =0xFF; // Set P1.0 to output direction P2OUT = 0xFF; _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } // Watchdog Timer interrupt service routine #pragma vector=WDT_VECTOR __interrupt void watchdog_timer(void) { P2OUT = ~(0x80>>(i++)); // Toggle P1.0 using exclusive-OR if(8==i) i=0; }