MSP430--看门狗定时器

2019-07-25 14:20发布

1.WDT总共有3个寄存器:WDTCTL,IE1,IFG1.






2.WDT interrupt:
看门狗有两种工作模式,watchdog mode, interval mode。
WDTIFG 置位的两种情况:在看门狗模式下发生看门狗溢出。在间隔定时模式下发生定时溢出,且全局中断使能GIE和WDTIE均开启。
WDTIFG在中断服务程序后会自动清除该标记。
3.WDTCTL
  1.     WDTPW:必须写0x5A.  
  2.     WDTHOLD:停止看门狗就设为1.  
  3.     WDTNMIES: NMI下降沿为1,上升沿为0.  
  4.     WDTNMI: NMI为1.  
  5.     WDTTMSEL:间隔定时器模式设为1.  
  6.     WDTCNTCL:通过该位来清除WDT计数器的值 通常设为1表示清除到0.  
  7.     WDTSSEL:设置时钟源 ACLK(辅助系统时钟)为1,SMCLK(子系统时钟)为0.  
  8.     WDTISx:设置时间间隔。0-3对应不同的分频。  
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
ccw1986
2019-07-25 15:29
4.WDT程序:

默认在中断中SR清零,也就是GIE是0,所以默认不会发生中断嵌套。只有在中断服务程序中打开GIE才能发生中断嵌套。
  1.     #include  <msp430x14x.h>  
  2.     unsigned int i=0;  
  3.     void main(void)  
  4.     {  
  5.       WDTCTL = WDT_MDLY_32;                     // Set Watchdog Timer interval to ~30ms  
  6.       IE1 |= WDTIE;                             // Enable WDT interrupt  
  7.       P2DIR =0xFF;                            // Set P1.0 to output direction  
  8.       P2OUT = 0xFF;  
  9.       _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt  
  10.     }  
  11.       
  12.     // Watchdog Timer interrupt service routine  
  13.     #pragma vector=WDT_VECTOR  
  14.     __interrupt void watchdog_timer(void)  
  15.     {  
  16.       P2OUT = ~(0x80>>(i++));                            // Toggle P1.0 using exclusive-OR  
  17.       if(8==i) i=0;  
  18.     }  
复制代码

一周热门 更多>