MSP430單片機(jī)看門狗面面觀
實(shí)驗(yàn)程序清單:
#include
void main(void){
P1DIR l=0x07; //設(shè)置P1.0~P1.2為輸出
for(;;){
volatile unsigned int i;
WDTCTL = WDTPW + WDTCNTCL; //復(fù)位WDT計(jì)數(shù)器
P1OUT ^= 0x07; //P1.0~P1.2相互異或
i=5000; //延時(shí)
do(i--);
while(i != 0);
}
}
上述實(shí)驗(yàn)啟動(dòng)后,如果程序正常運(yùn)行,LED會(huì)閃爍。缺省時(shí),MSP430的看門狗是允許狀態(tài),所運(yùn)行的程序會(huì)不斷地訪問看門狗。理論上,這個(gè)系統(tǒng)是不會(huì)發(fā)生啟動(dòng)失敗的,因?yàn)榧词箚?dòng)失敗,看門狗也應(yīng)該在數(shù)百毫秒內(nèi)啟動(dòng),復(fù)位整個(gè)系統(tǒng)?;谶@種思想,對(duì)單片機(jī)的復(fù)位進(jìn)行測試。K2斷開,用K1連續(xù)產(chǎn)生。Reset信號(hào),測試看門狗使系統(tǒng)重啟的成功率。K2閉合,則reset端高電平,理論上K1不能有效產(chǎn)生復(fù)位脈沖,觀察看門狗是否起作用。
2. 實(shí)驗(yàn)結(jié)果與分析
實(shí)驗(yàn)結(jié)果如下:K2斷開,連續(xù)開關(guān)K1,上電重啟系統(tǒng),平均155次失敗1次(LED不閃),即看門狗失效概率0.6%;K2閉合,連續(xù)開關(guān)K1,平均18次失敗1次(LED不閃),且一旦失敗,將連續(xù)失敗下去,看門狗無效率占到了約5.5%。
另外,當(dāng)采用同樣具有內(nèi)置看門狗的其他系列單片機(jī)替代實(shí)驗(yàn)中的MSP430,啟動(dòng)程序段作相應(yīng)修改時(shí),實(shí)驗(yàn)結(jié)果仍大致相同,這說明具有內(nèi)置看門狗的單片機(jī)面臨的問題是相同的。經(jīng)分析可能有如下原因:
① 由于看門狗的時(shí)鐘不獨(dú)立,計(jì)數(shù)時(shí)鐘與系統(tǒng)為同一分頻鏈路,因此看門狗不能在系統(tǒng)出現(xiàn)問題時(shí)有效運(yùn)作。
② 由于時(shí)鐘可用軟件設(shè)置,啟動(dòng)失敗時(shí),開機(jī)時(shí)鐘可能處于空檔,沒有時(shí)鐘看門狗不能生效。
③ 有些看門狗需要用軟件設(shè)置或啟動(dòng),因此啟動(dòng)失敗后,初始化程序沒有激活,CPU可能跳轉(zhuǎn)到隨機(jī)代碼,使看門狗被禁止。這樣的看門狗是需要有可靠的上電復(fù)位作保證的,因此,從理論上講,原設(shè)計(jì)存在著不合理性。基于上述分析,采用片外看門狗專用芯片TPS3823由獨(dú)立的分頻振蕩電路提供計(jì)數(shù)脈沖。實(shí)驗(yàn)電路如圖2所示。
上述電路中,TPS3823輸出定時(shí)溢出信號(hào)給Reset端。程序段中,CPU要不斷地通過I/O口輸出喂狗信號(hào),使看門狗計(jì)數(shù)器清零。在此電路中重復(fù)上述試驗(yàn)中K1、K2的相同動(dòng)作,系統(tǒng)重啟成功率達(dá)到100%。
結(jié) 語
未來的內(nèi)置看門狗必須有獨(dú)立可靠的時(shí)鐘。系統(tǒng)上電后,看門狗即為允許狀態(tài),無需軟件設(shè)置,它只能被外部硬件跳線或內(nèi)部熔絲(fuse)所禁止。目前,如果要求設(shè)計(jì)可靠性較高的嵌入式系統(tǒng),外置看門狗是必須考慮的。內(nèi)置看門狗的另一問題是系統(tǒng)復(fù)位后,程序應(yīng)判斷是由Reset端正常上電復(fù)位,還是程序跑飛看門狗所致,由此確定現(xiàn)場數(shù)據(jù)是否應(yīng)該保留。這也是在看門狗應(yīng)用中所應(yīng)考慮的。
評(píng)論