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