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