10
HT8 MCU 看門狗(WDT)應用範例防止死機 AN0426T V1.00 1/ 10 December 7, 2016 HT8 MCU 看門狗(WDT)應用範例防止死機 文件編碼:AN0426T 簡介 Holtek Flash MCU 提供了一個功能單元 WDT (Watch Dog Timer) 看門狗定時器,其最主要的 功能是避免程式因不可預期的因素 (如:電路噪聲) 造成系統長時間的癱瘓 (如:跳至死循 環或未知地址造成無法預測的結果)功能說明 Holtek 新推出 MCU 已無 2 Instructions 清看門狗架構,皆為 1 Instruction 清看門狗 (CLR WDT) 架構,說明如下。 Watchdog Timer 註:不同 MCU 的看門狗計數頻率來源有 fLXTfSYS/4fLIRCfSYS 中的至少一個,以及溢出時間 nm 值並不完全相同,具體情況應以實際 MCU datasheet 所提供參數為準。 上圖為一般 HT8 微控制器之 WDT 架構,其計數頻率 (fSUB) 來源來自晶片內部振盪器 LIRC 和外部振盪器 LXT WDTC 除了選擇 WDT 計數頻率來源 (WS2~WS0) 之外,還控制了 WDT 的啟動與復位(WE4~WE001010/10101 WDT Enable,其它值 MCU 復位)。當 WDT 溢出時會 啟動系統復位機制,若發生不可預期的因素導致程式運行異常時,造成無法在預期的時間 內執行 WDT 清除指令,此時因 WDT 計數溢出導致系統復位,使 MCU 重新恢復原程式的 運行。WDT 溢出時間的選擇視系統的應用需求而定。溢出時間越短,系統癱瘓後重新恢復 的速度越快,但因單位時間內需執行 WDT 清除指令較多,將致使 MCU 效率降低。選用較 長的溢出時間,雖可減少 WDT 清除指令的執行頻率,但系統恢復正常運行所需的時間也較 長。需特別注意,使用 LIRC 振盪器作為 WDT 的計數頻率來源,這樣其時鐘週期會隨 VDD溫度的變化而發生變化。

HT8 MCU 看門狗(WDT) 應用範例 防止死機 - Holtek · 2016. 12. 22. · HT8 MCU看門狗(WDT)應用範例–防止死機 AN0426T V1.00 2/ 10 December 7, 2016 工作原理 WDT

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 1/ 10 December 7, 2016

    HT8 MCU 看門狗(WDT)應用範例–防止死機

    文件編碼:AN0426T

    簡介

    Holtek Flash MCU 提供了一個功能單元 WDT (Watch Dog Timer) 看門狗定時器,其最主要的

    功能是避免程式因不可預期的因素 (如:電路噪聲) 造成系統長時間的癱瘓 (如:跳至死循

    環或未知地址造成無法預測的結果)。

    功能說明

    Holtek 新推出 MCU 已無 2 Instructions 清看門狗架構,皆為 1 Instruction 清看門狗 (CLR WDT)

    架構,說明如下。

    Watchdog Timer

    註:不同 MCU 的看門狗計數頻率來源有 fLXT、fSYS/4、fLIRC、fSYS中的至少一個,以及溢出時間

    的 n、m 值並不完全相同,具體情況應以實際 MCU datasheet 所提供參數為準。

    上圖為一般 HT8 微控制器之 WDT 架構,其計數頻率 (fSUB) 來源來自晶片內部振盪器 LIRC

    和外部振盪器 LXT。WDTC 除了選擇 WDT 計數頻率來源 (WS2~WS0) 之外,還控制了 WDT

    的啟動與復位(WE4~WE0:01010/10101 WDT Enable,其它值 MCU 復位)。當 WDT 溢出時會

    啟動系統復位機制,若發生不可預期的因素導致程式運行異常時,造成無法在預期的時間

    內執行 WDT 清除指令,此時因 WDT 計數溢出導致系統復位,使 MCU 重新恢復原程式的

    運行。WDT 溢出時間的選擇視系統的應用需求而定。溢出時間越短,系統癱瘓後重新恢復

    的速度越快,但因單位時間內需執行 WDT 清除指令較多,將致使 MCU 效率降低。選用較

    長的溢出時間,雖可減少 WDT 清除指令的執行頻率,但系統恢復正常運行所需的時間也較

    長。需特別注意,使用 LIRC 振盪器作為 WDT 的計數頻率來源,這樣其時鐘週期會隨 VDD,

    溫度的變化而發生變化。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 2/ 10 December 7, 2016

    工作原理

    WDT 的操作狀態 (溢出或是清零) 會影響到狀態暫存器的 TO 和 PDF 位元,請見下圖。

    如果WDT產生計數溢出,MCU會自動復位 (Reset) 回到初始狀態,讓程式從頭開始執行 (此

    時會設定 TO=1),避免長時間的死機。若是在正常工作狀態 (Normal Mode) 下發生 WDT 計

    數溢出,此時系統會自動產生 "晶片復位元 (Chip Reset)" 動作,讓系統內部所有特殊功能

    暫存器恢復至初始狀態。如果計數溢出是發生在 IDLE 或 SLEEP 模式時,只有程式計數器

    PC 和堆棧疊指針 SP 會被復位為 "0h",此即熱復位。

    看門狗定時器控制暫存器

    WDTC 暫存器用於控制 WDT 功能的使能/除能及選擇溢出週期,暫存器結合配置選項控制

    看門狗定時器的工作。看門狗定時器控制暫存器 WDTC 配置選項請見下圖。

    註:WDTC 配製略有不同,具體內容請參考具體微控制器的規格書。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 3/ 10 December 7, 2016

    看門狗定時器操作

    當 WDT 溢出時,它產生一個晶片復位元的動作。這也就意味著正常工作期間,用戶需要在

    應用程式中看門狗溢出前適時清看門狗定時器,防止 MCU 復位,可使用清除看門狗指令實

    現。無論什麼原因,程式失常跳轉到一個未知的地址或進入一個死循環,這些清除指令都

    不能被正確執行,此種情況下,看門狗將溢出以使微控制器復位元,通過配置選項選擇看

    門狗定時器的一些選項,如使能控制及時鐘源選擇。WDTC 暫存器中的 WE4 ~ WE0 位元用

    來使能看門狗定時器及其復位控制。剛上電時這些位被設定為 01010。將這些位設定成 01010,

    則看門狗會有最強的抗干擾性。

    程式正常運行時,WDT 溢出將導致晶片復位元,並置位狀態旗標 TO 位元,若系統處於休

    眠或空閑模式,當 WDT 發生溢出時,狀態暫存器中的 TO 應置位元,僅 PC 和堆疊指針復

    位。有三種方法可以用來清除 WDT 的內容。第一種是外部硬體復位元,即將復位引腳置位

    低準位。第二種是通過軟體清除指令,第三種是通過 "HALT" 指令。

    軟體指令使用 "CLR WDT" 清除看門狗暫存器,只要執行 "CLR WDT" 便清除 WDT。

    當設定分頻比為 215時,溢出週期最大。例如,時鐘源為 32.768kHz LXT 振盪器,分頻比為

    215時最大溢出週期約 1S,分頻比為 2

    8時最小溢出週期約 7.8ms。如果看門狗定時器的時鐘

    源為 fSYS/4 時鐘,應當注意的是,當系統進入睡眠模式或 IDLE0 模式,那麼指令時鐘停止且

    看門狗定時器可能會失去保護的作用。如果系統需要在嘈雜的環境中運行,強烈推薦使用

    fSUB時鐘源。

    看門狗定時器 (WDT) 的典型應用

    防止微處理器閉鎖是 WDT 的一個典型應用,通常軟體有一個 "主循環" 程式,用其調用副

    程式以實現不同的任務。每次程式循環對 WDT 進行一次復位,如果任何原因造成程式循環

    操作失敗,看門狗定時器則發生超時,對系統進行復位。

    具有 WDT 功能的系統非常適合檢測誤碼,中斷 (包括儲存器故障,EMI 對儲存器或介面放

    電) 可能導致處理器輸入、輸出數據的極性翻轉,當誤碼沒引入到程式資訊中時,微處理器

    將會執行錯誤的代碼。很有可能造成處理器的開始執行操作數,而非操作代碼。程式開始

    執行這種錯誤代碼時,將造成程式運行不正常,無法提供看門狗清零信號,從而導致處理

    器復位。

    需要注意的是,WDT 不能檢測瞬態系統故障,按照定義,只有在 WDT 計數器達到預定的

    時間間隔時才會復位處理器。正是這一原因,需要選擇一個最短超時週期,以便在系統失

    控前由 WDT 產生復位,使系統恢復正常工作。

    如果系統處於休眠狀態,WDT 溢出將置位 TO 旗標並喚醒系統,使系統繼續正常操作。

    如果看門狗定時器需要高精度的計時,可以採用外部時鐘源提供看門狗定時器所需時鐘。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 4/ 10 December 7, 2016

    硬體說明

    説明:在此以 HT45F3520 應用電路為例。對 WDT 而言,如果看門狗定時器發生溢出,系統

    將復位,在 HT45F3520 外圍連接 LED 燈,用於觀察看門狗定時器是否溢出。按鍵用

    於控制系統是否正確清除看門狗定時器。

    軟體說明

    S/W Flowchart (範例 1)

    開始

    關閉AD功能將I/O埠設為普通I/O埠

    使能WDT功能,設定溢出週期為1s,設定PA1與PA3為OUTMODEL

    清零看門狗定時器,設定PA.1位元High

    按鍵是否按下?

    設定PA.1為Low,PA.3為High

    循環跳轉

    N

    Y

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 5/ 10 December 7, 2016

    程式説明 (範例 1)

    本範例是使用 WDT 的程式,通過 "CLR WDT" 語句來清除看門狗定時器,避免看門狗定時

    器溢出導致程式復位。

    主程式流程介紹:

    程式首先所使用到的資料儲存器清除為零初始化。設定 ENADC 為零,Disable AD 功能。PA

    埠設定為輸出模式,且 PA 設定為低位元。WS2、WS1、WS0 = 111,設定看門狗定時器分頻

    比為 215,此時溢出週期為 1s。未按下按鍵,由於程式中有清除看門狗定時器指令,系統正

    常運行。按下按鍵,程式跳入死循環,此循環中無清除看門狗定時器指令,因此看門狗定

    時器將溢出,導致程式復位。若在循環中增加 "CLR WDT" 語句,則看門狗定時器被清除,

    程式在循環中持續運行,不會導致程式復位。

    程式範例 (範例 1)

    本範例 1 程式是使用 HT45F3520 為範例撰寫,如附件 wdt_asm.zip 檔案。

    實際輸出波形圖及說明。

    註:上圖為根據 WDTC 設定的看門狗定時器計數時間。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 6/ 10 December 7, 2016

    S/W Flowchart (範例 2)

    開始

    關閉AD功能,將I/O埠設為普通I/O埠

    使能WDT功能,設定溢出週期為62.5ms,設定PA1與PA3為

    OUT MODEL

    定時器中斷使能,定時器中斷時間為60ms

    CLR WDT,設定PA.3為High 設定PA.1為High

    STM定時器中斷處理

    返回 循環跳轉

    N

    Y

    程式説明 (範例 2)

    本範例是使用 WDT 的程式,通過 "CLR WDT”語句來清除看門狗定時器,避免看門狗定時

    器溢出導致程式復位。

    主程式流程介紹:

    程式首先所使用到的資料儲存器清除為零初始化。設定 ENADC 為零,Disable AD 功能。PA

    埠設定為輸出模式,且 PA 設定為低位元。

    WS2、WS1、WS0 = 011,設定看門狗定時器分頻比為 211,此時溢出週期為 62.5ms。STMC0[6:4]

    = 010 為選擇 STM 定時器的時鐘源為 fH/16,STMC0[3] = 1 使能 STM 定時器,STMC1[7:6] = 11

    為定時器功能選擇位元。本程式中,如果看門狗定時器復位時間大於定時器計數時間,程

    式正常運行,反之程式會因看門狗定時器溢出而復位。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 7/ 10 December 7, 2016

    程式範例 (範例 2)

    本範例 2 程式是使用 HT45F3520 為例撰寫,如附件 wdt_asm.zip 檔案。

    實際輸出波形圖及說明。

    註:上圖為定時器 STM 定時時間。

    註:上圖為看門狗定時器溢出時間,由於定時器定時時間比看門狗溢出時間短,在定時器

    中中斷副程式中加入清看門狗定時器的指令,能防止看門狗定時器溢出復位。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 8/ 10 December 7, 2016

    S/W Flowchart (範例 3)

    開始

    關閉AD功能將I/O埠設為普通I/O埠

    使能WDT功能,設定溢出週期為125ms,設定PA1與PA3為OUTMODEL

    設定PA.1位元High

    SW是否按下?

    調用CLR WDT,設定PA.3為High

    N

    Y

    返回

    程式説明 (範例 3)

    本範例是使用 WDT 的程式,通過 "CLR WDT" 語句來清除看門狗定時器,避免看門狗定時

    器溢出導致程式復位。主程式流程介紹:程式首先所使用到的資料儲存器清除為零初始化。

    設定 ENADC 為零,Disable AD 功能。PA 埠設定為輸出模式,且 PA 設定為低位元。

    本程式中使用到函數,在函數中有 "CLR WDT" 語句用於清除看門狗定時器,只有在調用

    函數的情況下,看門狗定時器被清,否則看門狗定時器溢出,程式復位。

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 9/ 10 December 7, 2016

    程式範例(範例 3)

    本範例 3 程式是使用 HT45F3520 為例撰寫,如附件 wdt_asm.zip 檔案。

    實際輸出波形圖及說明。

    註:上圖為根據 WDTC 設定的看門狗定時器計數時間。

    結論

    本文通過上面 WDT 的應用實例,對 WDT 的運用進行了闡述,使用者可根據具體情況來設

    定 WDTC,以選擇合理的 MCU 復位時間,在程式中清除 WDTC 計數器,防止 MCU 復位。

    程式範例 C 語言範例

    HT45F3520_C.rar

    ASM 語言範例

    HT45F3520_ASM.rar

    參考資料

    參考文件 HT45F3520 DataSheet。

    如需進一步瞭解,敬請瀏覽 Holtek 官方網站 www.holtek.com。

    http://www.holtek.com/

  • HT8 MCU 看門狗(WDT)應用範例–防止死機

    AN0426T V1.00 10/ 10 December 7, 2016

    版本及修改資訊

    Date 日期 Author 作者 Issue 發行、修訂說明

    2015.12.22 霍運軍 First Version

    免責聲明

    本網頁所載的所有資料、商標、圖片、連結及其他資料等(以下簡稱「資料」),只供參

    考之用,盛群半導體股份有限公司(以下簡稱「本公司」)將會隨時更改資料,並由本公

    司決定而不作另行通知。雖然本公司已盡力確保本網頁的資料準確性,但本公司並不保證

    該等資料均為準確無誤。本公司不會對任何錯誤或遺漏承擔責任。

    本公司不會對任何人士使用本網頁而引致任何損害(包括但不限於電腦病毒、系統固障、

    資料損失)承擔任何賠償。本網頁可能會連結至其他機構所提供的網頁,但這些網頁並不

    是由本公司所控制。本公司不對這些網頁所顯示的內容作出任何保證或承擔任何責任。

    責任限制

    在任何情況下,本公司並不須就任何人由於直接或間接進入或使用本網站,並就此內容上

    或任何產品、資訊或服務,而招致的任何損失或損害負任何責任。

    管轄法律

    本免責聲明受中華民國法律約束,並接受中華民國法院的管轄。

    免責聲明更新

    本公司保留隨時更新本免責聲明的權利,任何更改於本網站發佈時,立即生效。

    簡介功能說明工作原理看門狗定時器控制暫存器看門狗定時器操作看門狗定時器 (WDT) 的典型應用

    硬體說明軟體說明S/W Flowchart (範例1)程式説明 (範例1)程式範例 (範例1)S/W Flowchart (範例2)程式説明 (範例2)程式範例 (範例2)S/W Flowchart (範例3)程式説明 (範例3)程式範例(範例3)

    結論程式範例參考資料版本及修改資訊免責聲明責任限制管轄法律免責聲明更新

    /ColorImageDict > /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 300 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile (None) /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName () /PDFXTrapped /False

    /CreateJDFFile false /Description > /Namespace [ (Adobe) (Common) (1.0) ] /OtherNamespaces [ > /FormElements false /GenerateStructure false /IncludeBookmarks false /IncludeHyperlinks false /IncludeInteractive false /IncludeLayers false /IncludeProfiles false /MultimediaHandling /UseObjectSettings /Namespace [ (Adobe) (CreativeSuite) (2.0) ] /PDFXOutputIntentProfileSelector /DocumentCMYK /PreserveEditing true /UntaggedCMYKHandling /LeaveUntagged /UntaggedRGBHandling /UseDocumentProfile /UseDocumentBleed false >> ]>> setdistillerparams> setpagedevice