TQ2440國嵌學(xué)院gboot-關(guān)閉看門狗
看門狗,又叫 watchdog timer,是一個(gè)定時(shí)器電路,一般有一個(gè)輸入,叫喂狗(kicking the dog or service the dog),一個(gè)輸出到MCU的RST端,MCU正常工作的時(shí)候,每隔一段時(shí)間輸出一個(gè)信號到喂狗端,給 WDT 清零,如果超過規(guī)定的時(shí)間不喂狗,(一般在程序跑飛時(shí)),WDT 定時(shí)超過,就會給出一個(gè)復(fù)位信號到MCU,使MCU復(fù)位. 防止MCU死機(jī). 看門狗的作用就是防止程序發(fā)生死循環(huán),或者說程序跑飛。
看門狗工作原理:在系統(tǒng)運(yùn)行以后也就啟動了看門狗的計(jì)數(shù)器,看門狗就開始自動計(jì)數(shù),如果到了一定的時(shí)間還不去清看門狗,那么看門狗計(jì)數(shù)器就會溢出從而引起看門狗中斷,造成系統(tǒng)復(fù)位。所以在使用有看門狗的芯片時(shí)要注意清看門狗
看門狗分硬件看門狗和軟件看門狗。硬件看門狗是利用一個(gè)定時(shí)器電路,其定時(shí)輸出連接到電路的復(fù)位端,程序在一定時(shí)間范圍內(nèi)對定時(shí)器清零(俗稱“喂狗”),因此程序正常工作時(shí),定時(shí)器總不能溢出,也就不能產(chǎn)生復(fù)位信號。如果程序出現(xiàn)故障,不在定時(shí)周期內(nèi)復(fù)位看門狗,就使得看門狗定時(shí)器溢出產(chǎn)生復(fù)位信號并重啟系統(tǒng)。軟件看門狗原理上一樣,只是將硬件電路上的定時(shí)器用處理器的內(nèi)部定時(shí)器代替,這樣可以簡化硬件電路設(shè)計(jì),但在可靠性方面不如硬件定時(shí)器,比如系統(tǒng)內(nèi)部定時(shí)器自身發(fā)生故障就無法檢測到。當(dāng)然也有通過雙定時(shí)器相互監(jiān)視,這不僅加大系統(tǒng)開銷,也不能解決全部問題,比如中斷系統(tǒng)故障導(dǎo)致定時(shí)器中斷失效。
看門狗本身不是用來解決系統(tǒng)出現(xiàn)的問題,在調(diào)試過程中發(fā)現(xiàn)的故障應(yīng)該要查改設(shè)計(jì)本身的錯(cuò)誤。加入看門狗目的是對一些程序潛在錯(cuò)誤和惡劣環(huán)境干擾等因素導(dǎo)致系統(tǒng)死機(jī)而在無人干預(yù)情況下自動恢復(fù)系統(tǒng)正常工作狀態(tài)??撮T狗也不能完全避免故障造成的損失,畢竟從發(fā)現(xiàn)故障到系統(tǒng)復(fù)位恢復(fù)正常這段時(shí)間內(nèi)怠工。同時(shí)一些系統(tǒng)也需要復(fù)位前保護(hù)現(xiàn)場數(shù)據(jù),重啟后恢復(fù)現(xiàn)場數(shù)據(jù),這可能也需要一筆軟硬件的開銷。
簡單來說,看門狗就是一種監(jiān)視的機(jī)制,對異常做出判斷。
2、TQ2440看門狗
在S3C2440規(guī)格書中有一節(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í)鐘信號時(shí)PCLK的信號源,當(dāng)然好奇的同學(xué)肯定會問PCLK是什么,PCLK具體是什么將會在系統(tǒng)時(shí)鐘介紹,簡單的來PCLK是系統(tǒng)時(shí)鐘12MHZ(也有可能是24MHZ)的系統(tǒng)經(jīng)過鎖相環(huán)得到的,PCLK的頻率是系統(tǒng)時(shí)鐘的整數(shù)倍,后面會介紹。
2、看門狗的工作機(jī)制
這張圖也是從規(guī)格書中找到的,可以看到PCLK經(jīng)過WTCON控制寄存器設(shè)定后,然后進(jìn)入MUX,然后是WTDAT,最近到WTCNT數(shù)據(jù)寄存器,也就是說在看門狗工作的時(shí)候,看門狗的會通過計(jì)數(shù),將計(jì)數(shù)的值與數(shù)據(jù)寄存器的值進(jìn)行比對,溢出的話,就有產(chǎn)生中斷,也就是reset重啟,因此在打開看門狗之前,一定要初始化看門狗的數(shù)據(jù)寄存器WTDAT,這個(gè)原理規(guī)格書也有介紹到,如下
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)然通過看門狗的控制寄存器WTCON,繼續(xù)看下文
這里我們主要介紹看門狗控制寄存器WTCON,其他兩個(gè)寄存器暫時(shí)不介紹,用的時(shí)候再和大家分享。
首先看到WTCON寄存器的地址0x53000000,其次是表格最后一行Reset enable/disable=WTCON[0]也就是WTCON的最后一位是控制看門狗的打開或者關(guān)閉,1:打開;0:關(guān)閉。
下面就是關(guān)閉看門狗的代碼:
#define pWTCON 0x53000000
disable_watchdog:
評論