看門狗簡介?
看門狗通常用來提高系統的穩定性。當因為一些特殊的情況導致程序跑飛,或者運行邏輯錯誤,而沒 有及時喂狗時,看門狗會將MCU重新復位,以達到自動從異常中恢復的效果。建議用戶在所有應用中都使用看門狗,以提高系統穩定性。
AT32單片機有兩個看門狗:看門狗(WDT)和窗口看門狗(WWDT):
看門狗(WDT):一個12位的遞減計數器,當計數器從某個值遞減到0的時候,系統會產生復位,如果在計數器遞減到0之前刷新了遞減計數器,那么就不會產生復位。
窗口看門狗(WWDT):一個7位的遞減計數器,當計數器從某個值遞減到0x3F的時候,系統會產生復位,如果在規定時間刷新了計數器(窗口時間內),那么就不會產生復位。
各個型號差異
各型號的窗口看門狗(WWDT)相同,程序兼容。
各型號的看門狗(WDT)基本功能相同,只是各個型號之間,可能去掉了更高級的窗口功能或者低功耗下可選的停止運行功能,其余功能相同并且程序兼容。
表1. 各型號看門狗(WDT)差異
√:表示支持該功能,且功能相同。×:表示不支持該功能。 ?
使用場景對比
看門狗(WDT)和窗口看門狗(WWDT)作為兩種不同類型的看狗,有著不用的適用環境。圖1. WDT與WWDT使用場景對比
特點對比
圖2. WDT與WWDT特點對比
看門狗WDT?
寄存器訪問
狀態寄存器
? ? ?看門狗功能位于兩個不同的區域,寄存器部分位于1.2V電壓域,計數邏輯部分位于VDD電壓域,所以看門狗能夠在SLEEP、DEEPSLEEP、STANDBY模式下運行。
對看門狗寄存器的寫操作位于1.2V電壓域,所以當寫了寄存器之后,還需要將寄存器值同步到VDD電壓域。每一個寄存器都有一個同步標志指示同步操作是否完成。每一次同步時間最多需要4個LICK時鐘,大約125us。當寫了寄存器之后對應的同步標志自動置1,當同步完成了之后標志自動清0,在同步標志清零之前,不允許再寫此寄存器。
圖3. 看門狗框圖
RLDF:當該位為1時,表示重裝載值的同步正在進行中;當為0時,表示該過程執行完成。
DIVF:當該位為1時,表示預分頻器值的同步正在進行中;當為0時,表示該過程執行完成。WINF:當該位為1時,表示窗口值的同步正在進行中;當為0時,表示該過程執行完成。
標志獲取函數:
寄存器寫保護
看門狗寄存器受到寫保護,在寫寄存器前需要先解鎖寫保護,寫命令寄存器CMD=0x5555解鎖寫保護。當寫一個其他值,將重新開啟讀保護。受讀保護的寄存器如下表所示:表2. 看門狗寄存器
寄存器解鎖寫保護函數:
? ?
時鐘結構
圖4. 看門狗時鐘
看門狗計數器由LICK時鐘驅動,經過8位的預分頻器得到遞減計數器時鐘。LICK是內部RC時鐘,其典型值為40kHz,范圍為30kHz~60kHz之間(詳情請見對應型號的數據手冊)。所以超時時間也是在一定區間內,使用時應注意在超時時間配置上應該留有余量,如果需要獲得較為精確的看門狗超時時間,可以先通過定時器測量出LICK頻率,然后再根據實際的LICK頻率計算超時時間。
通過寄存器DIV[2:0]配置配置不同的預分頻值,可配置預分頻值為4、8、16、32、64、128、256。
分頻設置函數:
計數器
看門狗的計數器是一個12位的遞減計數器,最大值為0xFFF。當開啟看門狗后,計數值將從設定的值開始遞減,當遞減到0時,產生系統復位。圖5. 看門狗重載
計數值通過重載寄存器RLD設置,在分頻值確定的情況下,該值的大小決定了看門狗復位的時間長 短,每當往命令寄存器WDT_CMD寫入0xAAAA時,該寄存器的值便會更新到遞減計數器中(此操作通常稱為喂狗),喂狗的操作需要在計數器遞減到0之前進行,不然會發生復位。
看門狗復位時間計算如下:
表3. 看門狗復位時間(LICK=40kHz)
重載值設置函數:
重載看門狗計數器(喂狗)函數:
窗口功能
當WIN[11:0]設置為非默認值(0xFFF)將開啟窗口功能。當在計數值大于窗口值時重載計數器值將會產生系統復位,例如將WIN值設置成800時允許重載的窗口時間如下圖所示。圖6. 窗口功能
窗口設置函數:
低功耗停止計數
看門狗能夠在SLEEP、DEEPSLEEP、STANDBY模式下運行,用戶可選擇進入DEEPSLEEP、STANDBY模式后計數器是否停止計數,可由用戶系統數據區中的nWDT_DEPSLP、nWDT_STDBY位配置。
如果設置了停止計數,當進入了DEEPSLEEP、STANDBY模式后,看門狗計數器停止遞減,意味著看門狗在這兩種低功耗模式下不會發生復位,當從這兩種模式喚醒后,計數器從進入時的值繼續遞減。
圖7. 低功耗停止計數功能
用戶系統數據擦除函數:
用戶系統數據配置函數:
低功耗停止功能使用示例:
? ?
啟動看門狗
看門狗啟動方式分為硬件啟動和軟件啟動,當看門狗啟動了之后不能被關閉,除非發生復位。
軟件啟動方式
向命令寄存器寫入0xCCCC,啟用看門狗。
看門狗軟件使能函數:
硬件啟動方式
硬件啟動則需通過配置用戶系統數據區的nWDT_ATO_EN位來實現,使能硬件看門狗后,看門狗將在上電復位后自動開始運行。
硬件啟動看門狗使用示例:
? ?
使用方法
看門狗一般用于檢測程序跑飛或者死循環,比如一個正常的程序運行完的時間是10ms,可以設置看門狗超時的時間為20ms,當程序運行完便立即進行喂狗操作,這樣便不會產生復位,超過20ms還未喂狗時,說明產生了故障,此時會復位MCU。
例如:要設置WDT超時時間為20ms,那么可以設置預分頻值為4,計數值為200
配置步驟:1. 禁止寄存器寫保護
2. 設置預分頻值為4
3. 設置重載值為200
4. 啟用看門狗
5. 在應用程序中重載計數器
? ?
窗口看門狗WWDT?
窗口看門狗(WWDT)主要作用是用來檢測軟件邏輯是否按照預期執行,其喂狗時間是一個有上下范圍內,可以通過相關的寄存器,設定其上限時間和下限時間,喂狗的時間不能過早也不能過晚(當遞減計數器的值小于0x40,或者當遞減計數器在窗口外被刷新時產生復位)。 ?
時鐘結構
圖8. 窗口看門狗時鐘
窗口看門狗時鐘由APB1時鐘分頻而來,由于APB1_CLK的精確性,因此窗口看門狗時間精度很高。APB1時鐘先經過4096分頻后,再送到預分頻器,最后提供給7位遞減計數器CNT[6:0]。可以配置不同的預分頻值來獲得不同的時鐘,通過DIV[1:0]可配置預分頻值取值范圍為1、2、4、8。
分頻設置函數:
計數器
窗口看門狗的計數器是一個7位的遞減計數器,最大值為0x7F,當開啟看門狗后,計數值將從設定的值開始遞減,當遞減到0x3F時,產生系統復位。
表4. 窗口看門狗復位時間(PCLK=72MHz)
計數值設置函數:
? ?
窗口功能
窗口的值(WIN[6:0])可以自由設定,最大值為(0x7F),最小值必須大于下窗口的0x40,所以取值范圍為64~127(即:0x40~0x7F);只有當遞減計數器的值小于等于窗口值時,才允許刷新遞減計數器,否則將會產生復位。
為了便于喂狗,應用程序也可以利用重載計數器中斷(RLDIEN)進行喂狗。當遞減計數器到達0x40時,則產生中斷,在相應的中斷服務程序中重新設置計數器。
圖9. 窗口功能
如上圖所示當配置窗口值為0x4F時,不允許刷新的窗口為0x7F~0x50,允許刷新的窗口為0x4F~0x40。
重載標志清除函數:
重載標志獲取函數:
重載中斷使能函數:
窗口設置函數:
看門狗使能
設置WWDTEN=1使能窗口看門狗,當窗口看門狗被打開后不能被關閉,直到復位。為了避免使能看門狗后立即發生復位,在使能看門狗時,應該同時配置看門狗計數值。窗口看門狗使能函數:
使用方法
窗口看門狗一般用于檢測邏輯運行是否正常,比如一個正常的程序執行完的時間是10ms,當程序在10ms以前執行完說明出現了邏輯錯誤,可以設置看門狗窗口值為9ms,當程序在9ms以前進行喂狗時,說明程序產生了故障,此時會產生一個復位。
例如:當PCLK1=36MHz時,要設置WWDT超時時間為9ms,那么可以設置預分頻值為4,總的分頻為 4x4096=16384。計數值為127,窗口值為108,此時從計數值減到窗口值時間約為9.1ms。
所以允許喂狗時間為9.1~29.1ms,不允許喂狗時間為0~9.1ms。
配置步驟:
1. 開啟窗口看門狗APB1時鐘
2. 設置預分頻值為4,總的分頻為4096x4=16384
3. 設置窗口值為108
4. 啟用看門狗
5. 在應用程序中重載計數器
備注:需要在0x3F<遞減計數器<=窗口值執行
案例 看門狗WDT使用?
功能簡介
演示看門狗(WDT)功能使用。 ?
資源準備
1) 硬件環境:對應產品型號的AT-START BOARD
2) 軟件環境
projectat_start_f4xxexampleswdtwdt_reset
注:所有project都是基于keil 5而建立,若用戶需要在其他編譯環境上使用,請參考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各種編譯環境(例如IAR6/7,keil 4/5)進行簡單修改即可。
軟件設計
1) 配置流程
初始化看門狗
在主程序中喂狗
2) 代碼介紹
main函數代碼描述
? ?
實驗效果
正常運行時看門狗不會復位,當按下按鍵后,停止喂狗,導致MCU復位。
復位后,如果檢查到是看門狗復位則LED4點亮,否則LED4不亮。
案例?
? ? 窗口看門狗WWDT使用?
功能簡介
演示窗口看門狗(WWDT)功能使用。 ?
資源準備
1) 硬件環境:對應產品型號的AT-START BOARD
2) 軟件環境
projectat_start_f4xxexampleswwdtwwdt_reset
注:所有project都是基于keil 5而建立,若用戶需要在其他編譯環境上使用,請參考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各種編譯環境(例如IAR6/7,keil 4/5)進行簡單修改即可。
軟件設計
1) 配置流程
初始化窗口看門狗
在主程序中喂狗
2) 代碼介紹
main函數代碼描述
? ?
實驗效果
正常運行時窗口看門狗不會復位,當按下按鍵后,停止喂狗,導致MCU復位。
復位后,如果檢查到是窗口看門狗復位則LED4點亮,否則LED4不亮。
審核編輯:湯梓紅
?
評論
查看更多