MSP430單片機看門狗面面觀
設(shè)置看門狗:
mov.w # WDTPW+WDTCNTCL+WDTIS1 ,WDTCTL
mov.w # WDTPW+WDTCNTCL+WDTSSEL,WDTCTL;等
————————————————————————————————————————————
關(guān)于喂狗
喂狗,也就是在看門狗定時器溢出之前對其進行清零的操作。
網(wǎng)上和書里對喂狗的介紹不多,大部分都只說使用“WDTCTL = WDTPW + WDTCNTCL;”即可。一般使用起來沒什么問題,但是當不使用默認的看門狗時鐘源和分頻系數(shù)之后,問題就來了。(以G2XXX系列,SMCLK=1M,ACLK=32K為例)直接使用“WDTCTL = WDTPW + WDTCNTCL;”喂狗之后,看門狗就被重置成復位狀態(tài),看門狗復位時間就變成了32ms,如果遠小于你的喂狗時間,程序就沒法正常工作了,典型表現(xiàn)為定時重新啟動。仔細查看WDTCTL寄存器之后,就能發(fā)現(xiàn)問題。
要正確喂狗最好的辦法就是不改變原有看門狗配置的情況下將WDTCNTCL置1。這樣看來,簡單的就是“WDTCTL |= WDTPW + WDTCNTCL;”,其中需要注意的是WDTPW位讀出來是0x69,而需要寫入的是0x5A,實際上0x69|0x5A=0x7B,這就造成了在喂狗的時候,密碼錯誤造成單片機重啟。所以正確的喂狗語句就初始化看門狗的語句。當然如果想使用通用的喂狗語句,“WDTCTL = WDTPW + WDTCNTCL + (WDTCTL 0x00FF);”應該是最正確的(其中(WDTCTL 0x00FF)是用來獲取看門狗配置的)。
不過430頭文件已經(jīng)很清新了,喂狗一般直接加上時間(頭文件里面都處理過了)。
———————————————————————————————————————
看門狗定時器是一個計數(shù)器,基本功能是在發(fā)生軟件問題和程序跑飛后使系統(tǒng)重新啟動??撮T狗計數(shù)器正常工作時自動計數(shù),程序流程定期將其復位清零,如果系統(tǒng)在某處卡死或跑飛,該定時器將溢出,并將進入中斷。在定時器中斷中執(zhí)行一些復位操作,使系統(tǒng)恢復正常的工作狀態(tài),即在程序沒有正常運行期間,如期復位看門狗以保證所選擇的定時溢出歸零,使處理器重新啟動。
1. 看門狗問題及相關(guān)實驗
現(xiàn)今市面上流行的一些單片機,多嵌有內(nèi)部WDT,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,Microchip的PIC列,Atmel的AT89SXX系列和Holtek公司的Htxxx系列。但是這些內(nèi)部看門狗在工作時,多存在一定的誤差。一些工程師在設(shè)計的過程中,由于忽略了這一點,導致系統(tǒng)出現(xiàn)異常。MSP430系列單片機是美國德州儀器公司(TI)近幾年開發(fā)的新一代單片機,該系列是一款16位、具有精簡指令集、超低功耗的全新概念混合型單片機。在眾多單片機系列中,由于它具有極低的功耗、豐富的片內(nèi)外設(shè)和方便靈活的開發(fā)手段,已成為一顆耀眼的新星。其內(nèi)部自帶看門狗及復位電路,理論上如果程序跑飛,可用看門狗將其復位。但在實際使用過程中,發(fā)現(xiàn)看門狗的作用并非萬無一失,以下實驗證明了這一點。
實驗電路如圖1所示。
評論