TQ2440國(guó)嵌學(xué)院gboot-關(guān)閉看門狗
看門狗,又叫 watchdog timer,是一個(gè)定時(shí)器電路,一般有一個(gè)輸入,叫喂狗(kicking the dog or service the dog),一個(gè)輸出到MCU的RST端,MCU正常工作的時(shí)候,每隔一段時(shí)間輸出一個(gè)信號(hào)到喂狗端,給 WDT 清零,如果超過(guò)規(guī)定的時(shí)間不喂狗,(一般在程序跑飛時(shí)),WDT 定時(shí)超過(guò),就會(huì)給出一個(gè)復(fù)位信號(hào)到MCU,使MCU復(fù)位. 防止MCU死機(jī). 看門狗的作用就是防止程序發(fā)生死循環(huán),或者說(shuō)程序跑飛。
看門狗工作原理:在系統(tǒng)運(yùn)行以后也就啟動(dòng)了看門狗的計(jì)數(shù)器,看門狗就開(kāi)始自動(dòng)計(jì)數(shù),如果到了一定的時(shí)間還不去清看門狗,那么看門狗計(jì)數(shù)器就會(huì)溢出從而引起看門狗中斷,造成系統(tǒng)復(fù)位。所以在使用有看門狗的芯片時(shí)要注意清看門狗
看門狗分硬件看門狗和軟件看門狗。硬件看門狗是利用一個(gè)定時(shí)器電路,其定時(shí)輸出連接到電路的復(fù)位端,程序在一定時(shí)間范圍內(nèi)對(duì)定時(shí)器清零(俗稱“喂狗”),因此程序正常工作時(shí),定時(shí)器總不能溢出,也就不能產(chǎn)生復(fù)位信號(hào)。如果程序出現(xiàn)故障,不在定時(shí)周期內(nèi)復(fù)位看門狗,就使得看門狗定時(shí)器溢出產(chǎn)生復(fù)位信號(hào)并重啟系統(tǒng)。軟件看門狗原理上一樣,只是將硬件電路上的定時(shí)器用處理器的內(nèi)部定時(shí)器代替,這樣可以簡(jiǎn)化硬件電路設(shè)計(jì),但在可靠性方面不如硬件定時(shí)器,比如系統(tǒng)內(nèi)部定時(shí)器自身發(fā)生故障就無(wú)法檢測(cè)到。當(dāng)然也有通過(guò)雙定時(shí)器相互監(jiān)視,這不僅加大系統(tǒng)開(kāi)銷,也不能解決全部問(wèn)題,比如中斷系統(tǒng)故障導(dǎo)致定時(shí)器中斷失效。
看門狗本身不是用來(lái)解決系統(tǒng)出現(xiàn)的問(wèn)題,在調(diào)試過(guò)程中發(fā)現(xiàn)的故障應(yīng)該要查改設(shè)計(jì)本身的錯(cuò)誤。加入看門狗目的是對(duì)一些程序潛在錯(cuò)誤和惡劣環(huán)境干擾等因素導(dǎo)致系統(tǒng)死機(jī)而在無(wú)人干預(yù)情況下自動(dòng)恢復(fù)系統(tǒng)正常工作狀態(tài)??撮T狗也不能完全避免故障造成的損失,畢竟從發(fā)現(xiàn)故障到系統(tǒng)復(fù)位恢復(fù)正常這段時(shí)間內(nèi)怠工。同時(shí)一些系統(tǒng)也需要復(fù)位前保護(hù)現(xiàn)場(chǎng)數(shù)據(jù),重啟后恢復(fù)現(xiàn)場(chǎng)數(shù)據(jù),這可能也需要一筆軟硬件的開(kāi)銷。
簡(jiǎn)單來(lái)說(shuō),看門狗就是一種監(jiān)視的機(jī)制,對(duì)異常做出判斷。
2、TQ2440看門狗
在S3C2440規(guī)格書(shū)中有一節(jié)專門介紹看門狗的,也就是WATCHDOG TIMER,介紹如下:
OVERVIEW
The S3C2440A watchdog timer is used to resume the controller operation whenever it is disturbed by malfunctions,such as noise and system errors.It can be used as a normal 16-bit interval timer to request interrupt service.The watchdog timer generates the reset signal for 128 PCLK cycles.
FEATURES
— Normal interval timer mode with interrupt request
— Internal reset signal is activated for 128 PCLK cycles when the timer count value reaches 0 (time-out).
從上面一段可以看出看門狗使用的時(shí)鐘信號(hào)時(shí)PCLK的信號(hào)源,當(dāng)然好奇的同學(xué)肯定會(huì)問(wèn)PCLK是什么,PCLK具體是什么將會(huì)在系統(tǒng)時(shí)鐘介紹,簡(jiǎn)單的來(lái)PCLK是系統(tǒng)時(shí)鐘12MHZ(也有可能是24MHZ)的系統(tǒng)經(jīng)過(guò)鎖相環(huán)得到的,PCLK的頻率是系統(tǒng)時(shí)鐘的整數(shù)倍,后面會(huì)介紹。
2、看門狗的工作機(jī)制
這張圖也是從規(guī)格書(shū)中找到的,可以看到PCLK經(jīng)過(guò)WTCON控制寄存器設(shè)定后,然后進(jìn)入MUX,然后是WTDAT,最近到WTCNT數(shù)據(jù)寄存器,也就是說(shuō)在看門狗工作的時(shí)候,看門狗的會(huì)通過(guò)計(jì)數(shù),將計(jì)數(shù)的值與數(shù)據(jù)寄存器的值進(jìn)行比對(duì),溢出的話,就有產(chǎn)生中斷,也就是reset重啟,因此在打開(kāi)看門狗之前,一定要初始化看門狗的數(shù)據(jù)寄存器WTDAT,這個(gè)原理規(guī)格書(shū)也有介紹到,如下
WTDAT & WTCNT
Once the watchdog timer is enabled, the value of watchdog timer data (WTDAT) register cannot be automatically reloaded into the timer counter (WTCNT).In this reason, an initial value must be written to the watchdog timer count (WTCNT) register, before the watchdog timer starts.
3、關(guān)閉看門狗
到了真正關(guān)閉看門狗的時(shí)候,怎么樣能夠關(guān)閉看門狗呢,當(dāng)然通過(guò)看門狗的控制寄存器WTCON,繼續(xù)看下文
這里我們主要介紹看門狗控制寄存器WTCON,其他兩個(gè)寄存器暫時(shí)不介紹,用的時(shí)候再和大家分享。
首先看到WTCON寄存器的地址0x53000000,其次是表格最后一行Reset enable/disable=WTCON[0]也就是WTCON的最后一位是控制看門狗的打開(kāi)或者關(guān)閉,1:打開(kāi);0:關(guān)閉。
下面就是關(guān)閉看門狗的代碼:
#define pWTCON 0x53000000
disable_watchdog:
評(píng)論