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