看門(mén)狗簡(jiǎn)介
看門(mén)狗通常用來(lái)提高系統(tǒng)的穩(wěn)定性。當(dāng)因?yàn)橐恍┨厥獾那闆r導(dǎo)致程序跑飛,或者運(yùn)行邏輯錯(cuò)誤,而沒(méi) 有及時(shí)喂狗時(shí),看門(mén)狗會(huì)將MCU重新復(fù)位,以達(dá)到自動(dòng)從異常中恢復(fù)的效果。建議用戶(hù)在所有應(yīng)用中都使用看門(mén)狗,以提高系統(tǒng)穩(wěn)定性。
AT32單片機(jī)有兩個(gè)看門(mén)狗:看門(mén)狗(WDT)和窗口看門(mén)狗(WWDT):
- 看門(mén)狗(WDT):一個(gè)12位的遞減計(jì)數(shù)器,當(dāng)計(jì)數(shù)器從某個(gè)值遞減到0的時(shí)候,系統(tǒng)會(huì)產(chǎn)生復(fù)位,如果在計(jì)數(shù)器遞減到0之前刷新了遞減計(jì)數(shù)器,那么就不會(huì)產(chǎn)生復(fù)位。
- 窗口看門(mén)狗(WWDT):一個(gè)7位的遞減計(jì)數(shù)器,當(dāng)計(jì)數(shù)器從某個(gè)值遞減到0x3F的時(shí)候,系統(tǒng)會(huì)產(chǎn)生復(fù)位,如果在規(guī)定時(shí)間刷新了計(jì)數(shù)器(窗口時(shí)間內(nèi)),那么就不會(huì)產(chǎn)生復(fù)位。
各個(gè)型號(hào)差異
各型號(hào)的窗口看門(mén)狗(WWDT)相同,程序兼容。
各型號(hào)的看門(mén)狗(WDT)基本功能相同,只是各個(gè)型號(hào)之間,可能去掉了更高級(jí)的窗口功能或者低功耗下可選的停止運(yùn)行功能,其余功能相同并且程序兼容。
表1. 各型號(hào)看門(mén)狗(WDT)差異√:表示支持該功能,且功能相同。×:表示不支持該功能。
使用場(chǎng)景對(duì)比
看門(mén)狗(WDT)和窗口看門(mén)狗(WWDT)作為兩種不同類(lèi)型的看狗,有著不用的適用環(huán)境。圖1. WDT與WWDT使用場(chǎng)景對(duì)比
特點(diǎn)對(duì)比
圖2. WDT與WWDT特點(diǎn)對(duì)比
看門(mén)狗WDT
寄存器訪(fǎng)問(wèn)
狀態(tài)寄存器看門(mén)狗功能位于兩個(gè)不同的區(qū)域,寄存器部分位于1.2V電壓域,計(jì)數(shù)邏輯部分位于VDD電壓域,所以看門(mén)狗能夠在SLEEP、DEEPSLEEP、STANDBY模式下運(yùn)行。
對(duì)看門(mén)狗寄存器的寫(xiě)操作位于1.2V電壓域,所以當(dāng)寫(xiě)了寄存器之后,還需要將寄存器值同步到VDD電壓域。每一個(gè)寄存器都有一個(gè)同步標(biāo)志指示同步操作是否完成。每一次同步時(shí)間最多需要4個(gè)LICK時(shí)鐘,大約125us。當(dāng)寫(xiě)了寄存器之后對(duì)應(yīng)的同步標(biāo)志自動(dòng)置1,當(dāng)同步完成了之后標(biāo)志自動(dòng)清0,在同步標(biāo)志清零之前,不允許再寫(xiě)此寄存器。
圖3. 看門(mén)狗框圖
RLDF:當(dāng)該位為1時(shí),表示重裝載值的同步正在進(jìn)行中;當(dāng)為0時(shí),表示該過(guò)程執(zhí)行完成。
DIVF:當(dāng)該位為1時(shí),表示預(yù)分頻器值的同步正在進(jìn)行中;當(dāng)為0時(shí),表示該過(guò)程執(zhí)行完成。WINF:當(dāng)該位為1時(shí),表示窗口值的同步正在進(jìn)行中;當(dāng)為0時(shí),表示該過(guò)程執(zhí)行完成。
標(biāo)志獲取函數(shù):
寄存器寫(xiě)保護(hù)
看門(mén)狗寄存器受到寫(xiě)保護(hù),在寫(xiě)寄存器前需要先解鎖寫(xiě)保護(hù),寫(xiě)命令寄存器CMD=0x5555解鎖寫(xiě)保護(hù)。當(dāng)寫(xiě)一個(gè)其他值,將重新開(kāi)啟讀保護(hù)。受讀保護(hù)的寄存器如下表所示:表2. 看門(mén)狗寄存器
寄存器解鎖寫(xiě)保護(hù)函數(shù):
時(shí)鐘結(jié)構(gòu)
圖4. 看門(mén)狗時(shí)鐘
看門(mén)狗計(jì)數(shù)器由LICK時(shí)鐘驅(qū)動(dòng),經(jīng)過(guò)8位的預(yù)分頻器得到遞減計(jì)數(shù)器時(shí)鐘。LICK是內(nèi)部RC時(shí)鐘,其典型值為40kHz,范圍為30kHz~60kHz之間(詳情請(qǐng)見(jiàn)對(duì)應(yīng)型號(hào)的數(shù)據(jù)手冊(cè))。所以超時(shí)時(shí)間也是在一定區(qū)間內(nèi),使用時(shí)應(yīng)注意在超時(shí)時(shí)間配置上應(yīng)該留有余量,如果需要獲得較為精確的看門(mén)狗超時(shí)時(shí)間,可以先通過(guò)定時(shí)器測(cè)量出LICK頻率,然后再根據(jù)實(shí)際的LICK頻率計(jì)算超時(shí)時(shí)間。
通過(guò)寄存器DIV[2:0]配置配置不同的預(yù)分頻值,可配置預(yù)分頻值為4、8、16、32、64、128、256。
分頻設(shè)置函數(shù):
計(jì)數(shù)器
看門(mén)狗的計(jì)數(shù)器是一個(gè)12位的遞減計(jì)數(shù)器,最大值為0xFFF。當(dāng)開(kāi)啟看門(mén)狗后,計(jì)數(shù)值將從設(shè)定的值開(kāi)始遞減,當(dāng)遞減到0時(shí),產(chǎn)生系統(tǒng)復(fù)位。圖5. 看門(mén)狗重載
計(jì)數(shù)值通過(guò)重載寄存器RLD設(shè)置,在分頻值確定的情況下,該值的大小決定了看門(mén)狗復(fù)位的時(shí)間長(zhǎng) 短,每當(dāng)往命令寄存器WDT_CMD寫(xiě)入0xAAAA時(shí),該寄存器的值便會(huì)更新到遞減計(jì)數(shù)器中(此操作通常稱(chēng)為喂狗),喂狗的操作需要在計(jì)數(shù)器遞減到0之前進(jìn)行,不然會(huì)發(fā)生復(fù)位。
看門(mén)狗復(fù)位時(shí)間計(jì)算如下:
表3. 看門(mén)狗復(fù)位時(shí)間(LICK=40kHz)
重載值設(shè)置函數(shù):
重載看門(mén)狗計(jì)數(shù)器(喂狗)函數(shù):
窗口功能
當(dāng)WIN[11:0]設(shè)置為非默認(rèn)值(0xFFF)將開(kāi)啟窗口功能。當(dāng)在計(jì)數(shù)值大于窗口值時(shí)重載計(jì)數(shù)器值將會(huì)產(chǎn)生系統(tǒng)復(fù)位,例如將WIN值設(shè)置成800時(shí)允許重載的窗口時(shí)間如下圖所示。圖6. 窗口功能
窗口設(shè)置函數(shù):
低功耗停止計(jì)數(shù)
看門(mén)狗能夠在SLEEP、DEEPSLEEP、STANDBY模式下運(yùn)行,用戶(hù)可選擇進(jìn)入DEEPSLEEP、STANDBY模式后計(jì)數(shù)器是否停止計(jì)數(shù),可由用戶(hù)系統(tǒng)數(shù)據(jù)區(qū)中的nWDT_DEPSLP、nWDT_STDBY位配置。
如果設(shè)置了停止計(jì)數(shù),當(dāng)進(jìn)入了DEEPSLEEP、STANDBY模式后,看門(mén)狗計(jì)數(shù)器停止遞減,意味著看門(mén)狗在這兩種低功耗模式下不會(huì)發(fā)生復(fù)位,當(dāng)從這兩種模式喚醒后,計(jì)數(shù)器從進(jìn)入時(shí)的值繼續(xù)遞減。
圖7. 低功耗停止計(jì)數(shù)功能
用戶(hù)系統(tǒng)數(shù)據(jù)擦除函數(shù):
用戶(hù)系統(tǒng)數(shù)據(jù)配置函數(shù):
低功耗停止功能使用示例:
啟動(dòng)看門(mén)狗
看門(mén)狗啟動(dòng)方式分為硬件啟動(dòng)和軟件啟動(dòng),當(dāng)看門(mén)狗啟動(dòng)了之后不能被關(guān)閉,除非發(fā)生復(fù)位。
軟件啟動(dòng)方式
向命令寄存器寫(xiě)入0xCCCC,啟用看門(mén)狗。
看門(mén)狗軟件使能函數(shù):
硬件啟動(dòng)方式
硬件啟動(dòng)則需通過(guò)配置用戶(hù)系統(tǒng)數(shù)據(jù)區(qū)的nWDT_ATO_EN位來(lái)實(shí)現(xiàn),使能硬件看門(mén)狗后,看門(mén)狗將在上電復(fù)位后自動(dòng)開(kāi)始運(yùn)行。
硬件啟動(dòng)看門(mén)狗使用示例:
使用方法
看門(mén)狗一般用于檢測(cè)程序跑飛或者死循環(huán),比如一個(gè)正常的程序運(yùn)行完的時(shí)間是10ms,可以設(shè)置看門(mén)狗超時(shí)的時(shí)間為20ms,當(dāng)程序運(yùn)行完便立即進(jìn)行喂狗操作,這樣便不會(huì)產(chǎn)生復(fù)位,超過(guò)20ms還未喂狗時(shí),說(shuō)明產(chǎn)生了故障,此時(shí)會(huì)復(fù)位MCU。
例如:要設(shè)置WDT超時(shí)時(shí)間為20ms,那么可以設(shè)置預(yù)分頻值為4,計(jì)數(shù)值為200
配置步驟:1. 禁止寄存器寫(xiě)保護(hù)
2. 設(shè)置預(yù)分頻值為4
3. 設(shè)置重載值為200
4. 啟用看門(mén)狗
5. 在應(yīng)用程序中重載計(jì)數(shù)器
窗口看門(mén)狗WWDT
窗口看門(mén)狗(WWDT)主要作用是用來(lái)檢測(cè)軟件邏輯是否按照預(yù)期執(zhí)行,其喂狗時(shí)間是一個(gè)有上下范圍內(nèi),可以通過(guò)相關(guān)的寄存器,設(shè)定其上限時(shí)間和下限時(shí)間,喂狗的時(shí)間不能過(guò)早也不能過(guò)晚(當(dāng)遞減計(jì)數(shù)器的值小于0x40,或者當(dāng)遞減計(jì)數(shù)器在窗口外被刷新時(shí)產(chǎn)生復(fù)位)。
時(shí)鐘結(jié)構(gòu)
圖8. 窗口看門(mén)狗時(shí)鐘
窗口看門(mén)狗時(shí)鐘由APB1時(shí)鐘分頻而來(lái),由于APB1_CLK的精確性,因此窗口看門(mén)狗時(shí)間精度很高。APB1時(shí)鐘先經(jīng)過(guò)4096分頻后,再送到預(yù)分頻器,最后提供給7位遞減計(jì)數(shù)器CNT[6:0]。可以配置不同的預(yù)分頻值來(lái)獲得不同的時(shí)鐘,通過(guò)DIV[1:0]可配置預(yù)分頻值取值范圍為1、2、4、8。
分頻設(shè)置函數(shù):
計(jì)數(shù)器
窗口看門(mén)狗的計(jì)數(shù)器是一個(gè)7位的遞減計(jì)數(shù)器,最大值為0x7F,當(dāng)開(kāi)啟看門(mén)狗后,計(jì)數(shù)值將從設(shè)定的值開(kāi)始遞減,當(dāng)遞減到0x3F時(shí),產(chǎn)生系統(tǒng)復(fù)位。
表4. 窗口看門(mén)狗復(fù)位時(shí)間(PCLK=72MHz)
計(jì)數(shù)值設(shè)置函數(shù):
窗口功能
窗口的值(WIN[6:0])可以自由設(shè)定,最大值為(0x7F),最小值必須大于下窗口的0x40,所以取值范圍為64~127(即:0x40~0x7F);只有當(dāng)遞減計(jì)數(shù)器的值小于等于窗口值時(shí),才允許刷新遞減計(jì)數(shù)器,否則將會(huì)產(chǎn)生復(fù)位。
為了便于喂狗,應(yīng)用程序也可以利用重載計(jì)數(shù)器中斷(RLDIEN)進(jìn)行喂狗。當(dāng)遞減計(jì)數(shù)器到達(dá)0x40時(shí),則產(chǎn)生中斷,在相應(yīng)的中斷服務(wù)程序中重新設(shè)置計(jì)數(shù)器。
圖9. 窗口功能
如上圖所示當(dāng)配置窗口值為0x4F時(shí),不允許刷新的窗口為0x7F~0x50,允許刷新的窗口為0x4F~0x40。
重載標(biāo)志清除函數(shù):
重載標(biāo)志獲取函數(shù):
重載中斷使能函數(shù):
窗口設(shè)置函數(shù):
看門(mén)狗使能
設(shè)置WWDTEN=1使能窗口看門(mén)狗,當(dāng)窗口看門(mén)狗被打開(kāi)后不能被關(guān)閉,直到復(fù)位。為了避免使能看門(mén)狗后立即發(fā)生復(fù)位,在使能看門(mén)狗時(shí),應(yīng)該同時(shí)配置看門(mén)狗計(jì)數(shù)值。窗口看門(mén)狗使能函數(shù):
使用方法
窗口看門(mén)狗一般用于檢測(cè)邏輯運(yùn)行是否正常,比如一個(gè)正常的程序執(zhí)行完的時(shí)間是10ms,當(dāng)程序在10ms以前執(zhí)行完說(shuō)明出現(xiàn)了邏輯錯(cuò)誤,可以設(shè)置看門(mén)狗窗口值為9ms,當(dāng)程序在9ms以前進(jìn)行喂狗時(shí),說(shuō)明程序產(chǎn)生了故障,此時(shí)會(huì)產(chǎn)生一個(gè)復(fù)位。
例如:當(dāng)PCLK1=36MHz時(shí),要設(shè)置WWDT超時(shí)時(shí)間為9ms,那么可以設(shè)置預(yù)分頻值為4,總的分頻為 4x4096=16384。計(jì)數(shù)值為127,窗口值為108,此時(shí)從計(jì)數(shù)值減到窗口值時(shí)間約為9.1ms。
所以允許喂狗時(shí)間為9.1~29.1ms,不允許喂狗時(shí)間為0~9.1ms。
配置步驟:
1. 開(kāi)啟窗口看門(mén)狗APB1時(shí)鐘
2. 設(shè)置預(yù)分頻值為4,總的分頻為4096x4=16384
3. 設(shè)置窗口值為108
4. 啟用看門(mén)狗
5. 在應(yīng)用程序中重載計(jì)數(shù)器
備注:需要在0x3F<遞減計(jì)數(shù)器<=窗口值執(zhí)行
案例 看門(mén)狗WDT使用
功能簡(jiǎn)介
演示看門(mén)狗(WDT)功能使用。
資源準(zhǔn)備
1) 硬件環(huán)境:對(duì)應(yīng)產(chǎn)品型號(hào)的AT-START BOARD
2) 軟件環(huán)境
project\at_start_f4xx\examples\wdt\wdt_reset
注:所有project都是基于keil 5而建立,若用戶(hù)需要在其他編譯環(huán)境上使用,請(qǐng)參考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各種編譯環(huán)境(例如IAR6/7,keil 4/5)進(jìn)行簡(jiǎn)單修改即可。
軟件設(shè)計(jì)
1) 配置流程
- 初始化看門(mén)狗
- 在主程序中喂狗
2) 代碼介紹
- main函數(shù)代碼描述
實(shí)驗(yàn)效果
- 正常運(yùn)行時(shí)看門(mén)狗不會(huì)復(fù)位,當(dāng)按下按鍵后,停止喂狗,導(dǎo)致MCU復(fù)位。
- 復(fù)位后,如果檢查到是看門(mén)狗復(fù)位則LED4點(diǎn)亮,否則LED4不亮。
案例 窗口看門(mén)狗WWDT使用
功能簡(jiǎn)介
演示窗口看門(mén)狗(WWDT)功能使用。
資源準(zhǔn)備
1) 硬件環(huán)境:對(duì)應(yīng)產(chǎn)品型號(hào)的AT-START BOARD
2) 軟件環(huán)境
project\at_start_f4xx\examples\wwdt\wwdt_reset
注:所有project都是基于keil 5而建立,若用戶(hù)需要在其他編譯環(huán)境上使用,請(qǐng)參考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各種編譯環(huán)境(例如IAR6/7,keil 4/5)進(jìn)行簡(jiǎn)單修改即可。
軟件設(shè)計(jì)
1) 配置流程
- 初始化窗口看門(mén)狗
- 在主程序中喂狗
2) 代碼介紹
- main函數(shù)代碼描述
實(shí)驗(yàn)效果
- 正常運(yùn)行時(shí)窗口看門(mén)狗不會(huì)復(fù)位,當(dāng)按下按鍵后,停止喂狗,導(dǎo)致MCU復(fù)位。
- 復(fù)位后,如果檢查到是窗口看門(mén)狗復(fù)位則LED4點(diǎn)亮,否則LED4不亮。
關(guān)于雅特力雅特力科技于2016年成立,是一家致力于推動(dòng)全球市場(chǎng)32位微控制器(MCU)創(chuàng)新趨勢(shì)的芯片設(shè)計(jì)公司,專(zhuān)注于ARM Cortex-M4/M0+的32位微控制器研發(fā)與創(chuàng)新,全系列采用55nm先進(jìn)工藝及ARM Cortex-M4高效能或M0+低功耗內(nèi)核,締造M4業(yè)界最高主頻288MHz運(yùn)算效能,并支持工業(yè)級(jí)別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當(dāng)多元的終端產(chǎn)品成功案例:如微型打印機(jī)、掃地機(jī)、光流無(wú)人機(jī)、熱成像儀、激光雷達(dá)、工業(yè)縫紉機(jī)、伺服驅(qū)控、電競(jìng)周邊市場(chǎng)、斷路器、ADAS、T-BOX、數(shù)字電源、電動(dòng)工具等終端設(shè)備應(yīng)用,廣泛地覆蓋5G、物聯(lián)網(wǎng)、消費(fèi)、商務(wù)及工控等領(lǐng)域。
-
mcu
+關(guān)注
關(guān)注
146文章
16885瀏覽量
349924
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論