MSP430F5538A watchdog

1、watchdog timer(WDT_A)
看門狗定時器?
看門狗定時器32bit定時器,能被用作看門狗或者作爲一個間隔定時器。

在看之前,給自己幾個問題
 a、看門狗依賴於時鐘配置嗎?
 b、多長時間喂狗,軟件喂狗(定時器)?時間長短如何配置?
 c、看門狗重啓和軟件重啓以及硬件重啓的區別?

看門狗定時器模塊的主要功能是在軟件問題發生時執行系統重啓;如果指定的時間到還不喂狗,就會系統復位。
如果在應用中不需要看門狗功能,看門狗模塊可以配置成一個間隔定時器並且在指定時間間隔產生中斷。

看門狗定時器模塊特性:
8個軟件選擇的時間間隔
看門狗模式
間隔模式
密碼保護訪問看門狗定時器控制寄存器
可選的時鐘源
停止用於節約電力
時鐘自動防故障特性

注意:看門狗定時器上電激活
PUC(上電清除復位信號)後, WDT_A模塊自動配置成看門狗模式,使用SMCLK爲時鐘源,~32ms復位間隔;所以用戶必須在初始復位間隔超時前設置或者停止WDT_A模塊;

Msp430f5438a.cmd (c:\ti\ccsv5\ccs_base\msp430\include)
WDTCTL             = 0x015C;

/*! when 0 the watchdog timer and interrupt is used and an invalid password
* is used to reset the part, when 1 the watchdog expiring will cause the micro
* to reset and if ACLK goes away VLOCLK will be used.
*/
#define USE_FAILSAFE_WATCHDOG ( 1 )

#define WDTPW                  (0x5A00)
#define WDTCNTCL               (0x0008)       /* WDT - Timer Clear */
#define WDTSSEL__ACLK          (1*0x0020u)    /* WDT - Timer Clock Source Select: ACLK */
#define WDTIS_3                (3*0x0001u)    /* WDT - Timer Interval Select: /512k */

void ResetWatchdog(void)
{
  /* set watchdog for 16 second timeout
   * write password, select aclk, WDTIS_3 means divide by 512*1024 = 16 s;
   * WDTIS_2: 4 mins 
   * Any write operation to WDTCTL must be a word operation with 05Ah (WDTPW) in the upper byte
Watchdog timer interval select. These bits select the watchdog timer interval to
set the WDTIFG flag and/or generate a PUC.
000b = Watchdog clock source /(2^31) (18h:12m:16s at 32.768 kHz)
001b = Watchdog clock source /(2^27) (01h:08m:16s at 32.768 kHz)
010b = Watchdog clock source /(2^23) (00h:04m:16s at 32.768 kHz)
011b = Watchdog clock source /(2^19) (00h:00m:16s at 32.768 kHz)
100b = Watchdog clock source /(2^15) (1 s at 32.768 kHz)
101b = Watchdog clock source /(2^13) (250 ms at 32.768 kHz)
110b = Watchdog clock source /(2^9) (15.625 ms at 32.768 kHz)
111b = Watchdog clock source /(2^6) (1.95 ms at 32.768 kHz)   
2^19/(32.768KHZ) =512*1024/32768 = 16s 
*/
#ifUSE_FAILSAFE_WATCHDOG
/* wathdog 看門狗功能 *
WDTPW 密碼0x5a00
WDTCNTCL:計數清零
時鐘源以及超時間隔:ACLK、3(也即16s)
*/
  WDTCTL = WDTPW + WDTCNTCL + WDTSSEL__ACLK + WDTIS_3;

/* Interrupt Enable Register  中斷使能寄存器 ,*/
  SFRIE1 &= ~WDTIE; /* disable  watchdog timer interrupt */

#else
/* interval timer 間隔定時器 */
  WDTCTL = WDTPW + WDTCNTCL + WDTSSEL__ACLK + WDTIS_3 + WDTTMSEL;

/* enable watchdog timer interrupt */
  SFRIE1 |= WDTIE;

#endif
}

在idle線程中會調用void ResetWatchdog(void),以及任務耗時的地方等都需要適當喂一下狗


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章