第二部分:S5PV210_关看门狗_1
1.關看門狗
(1)什么是看門狗?
看門狗就好像你家門口的一條狗,我們必須在規定的時間內去喂狗,如果經過了規定的時間,你還不去喂狗的話,它就會咬死你。
看門狗本質上是一個定時器,首先,你給看門狗設置好一段時間,然后看門狗就開始計時,CPU必須在這段時間過去之前重置看門狗內的時間,好讓他重新計時,如果cpu不去重置看門狗內的時間的話,看門狗就會重啟整個系統或者產生一個中斷,當我們系統正常運行的時候,我們當然不希望重啟系統啦,所以,我們就要喂狗(重置它里面的值)。
(2)看門狗的作用:監督,維護好系統,看系統是否正常運轉。
在一些比較惡劣的環境的情況下,當我們的系統壞的時候,我們沒有辦法人工重啟的時候,看門狗就可以幫助我們重啟系統。因為,系統壞了,CPU就不會去喂狗,不喂狗,看門狗到了那個時間后,就會觸發重啟,系統就自動重啟了。
(3)為什么要關看門狗?
因為現在我們人工用著這機器,當然不需要看門狗了,因為,系統崩潰了,我們會自己重啟它,所以,我們現在需要關閉看門狗的功能。
(4)看門狗相關的寄存器
WTCON:看門狗主要功能的設置,如開/關看門狗,使能中斷,使能重啟,設置時鐘分頻多少等等。
WTDAT:看門狗重載的計數值
WTCNT:看門狗當前的計數值,看門狗計時時的當前值。
WTCLRINT:清中斷,寫1進去就清除中斷
WTDAT寄存器和WTCNT寄存器的關系:看門狗剛開始啟動的時候,WTDAT的值是不會自動重載到WTCNT的(這里WTDAT的值自動重載進WTCNT內是僅發生在中斷的情況下的,發生完中斷后,WTDAT的值就會自動重載進WTCNT內,然后WTCNT開始自動減1,開始下一次計時。不會發生在重啟的原因是:重啟的時候,斷電,一切寄存器內的值都不存在了,并且重啟的時候也不需要自動重載,因為它又經過了一次初始化,用初始化的值就可以了。),因此,在啟動看門狗之前,我們必須寫一個初始值給WTCNT寄存器。
(5)看門狗時鐘分頻的介紹
來源是PCLK(66MHz),經過一個預分頻器,再經過一個MUX開關,就得到了看門狗的時鐘頻率了。
計算公式:
以下面代碼為例:t_watchdog = 1/(66M/(65+1))/128) = 128us
(6)寫相關寄存器的代碼示例
1 void wdt_init_interrupt(void) 2 { 3 //首先,我們就設置預分頻器(8~15),先清零,然后再設置值為66,因為時鐘源是PCLK(66MHz)得到1MHz 4 rWTCON &= ~(0xff<<8); 5 rWTCON |= (65<<8); 6 7 //然后設置分頻器(3~4),先清零,然后設置值為128,得到周期是128us 8 rWTCON &= ~(0x3<<3); 9 rWTCON |= (0x3<<3); 10 11 //然后就選擇中斷模式了(2),關閉復位模式(0) 12 rWTCON |= (1<<2); 13 rWTCON &= ~(1<<0); 14 15 //設置計數值了,就設置為1.28s 16 rWTDAT = 10000; 17 rWTCNT = 10000; 18 19 //最后,都設置好了,就開啟看門狗定時器了(5) 20 rWTCON |= (1<<5); 21 } 22 rWTCLRINT = 1; //清中斷,這里是設置任意數就可以清零了還有喂狗的操作是寫WTCNT寄存器的:
void feed_dog(void) {rWTCNT= 10000; }參考來源:朱老師物聯網大教程
轉載于:https://www.cnblogs.com/nibuyaoni/p/5716959.html
總結
以上是生活随笔為你收集整理的第二部分:S5PV210_关看门狗_1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 时期格式 星期显示英文
- 下一篇: 2009 最优贸易