安全微控制器系列(DS5000FP、DS5001FP、DS5002FP和相關模塊)集成了內部看門狗定時器,以防止代碼執行錯誤??撮T狗定時器使用微控制器也使用的高精度晶體振蕩器。這消除了對RC振蕩器的需求,同時提供了更高的精度。
概述
微控制器通常用于電源瞬變、電磁干擾 (EMI) 和靜電放電 (ESD) 豐富的惡劣環境中??偩€損壞和電磁放電引起的程序損壞可能導致微處理器執行錯誤的指令。在這些環境中,看門狗定時器是一種有用的外設,可以幫助捕獲和重置已“失控”的微控制器。
看門狗定時器是一個簡單的倒數定時器,用于在特定時間間隔后重置微處理器。在正常運行的系統中,軟件將定期“寵愛”或重新啟動看門狗定時器。重新啟動后,看門狗將開始計時另一個預定間隔。當軟件或設備無法正常運行時,軟件不會在超時之前重新啟動看門狗計時器。當看門狗定時器超時時,將導致微控制器復位。如果系統軟件設計正確且沒有硬件故障,則重置將導致系統再次正常運行。重置條件必須是“安全”狀態。例如,讓磁條讀卡器的復位狀態啟用寫入磁頭是不明智的。
許多系統都是使用外部看門狗定時器設計的。安全微控制器系列通過集成內部看門狗定時器,無需外部元件。通過在微控制器內移動看門狗定時器,可以減少系統中的器件數量,從而提高整體系統可靠性??撮T狗定時器可以利用微控制器使用的高精度晶體振蕩器,而不是大多數獨立看門狗定時器使用的不精確的RC振蕩器??撮T狗定時器的操作與微控制器無關,除非通過定時訪問程序專門解決。失控的微控制器意外禁用看門狗定時器的可能性小于 1/7.2 ×1016.本應用筆記介紹了安全微控制器看門狗定時器的特性和用途。
看門狗定時器的一般用途
看門狗定時器的主要應用是作為系統監視器來檢測和復位“失控”微處理器。當程序執行出錯時,它將無法正確執行重新啟動看門狗的代碼。在這種情況下,看門狗定時器將超時并導致微控制器復位。在正確設計的系統中,復位將糾正錯誤。
無論看門狗定時器的功能如何,都存在無法通過復位來糾正的某些故障。例如,看門狗定時器無法防止或檢測數據存儲器的損壞。除非數據損壞影響程序流,或者采取了一些額外的措施,否則數據損壞不會導致監視器超時。當然,自診斷軟件可以編寫成這樣一種方式,即重新啟動看門狗取決于數據存儲器的驗證。雖然許多應用程序實現了此類數據驗證方案,但它超出了本文檔的范圍。
應該記住,看門狗定時器無法立即檢測到故障。根據定義,監視程序計時器必須達到其超時間隔的末尾,然后才能重置處理器。系統設計人員應注意執行錯誤指令和看門狗定時器復位之間可能發生的最大時間間隔。
放置重新啟動說明
在安全微控制器系列中,看門狗定時器由主系統時鐘驅動。超時間隔固定為 122,800 個計算機周期(1,473,600 個外部時鐘周期)。當達到超時時,將進行重置。表1顯示了與不同晶體頻率相關的復位時間間隔。
時鐘頻率 | 超時間隔 |
16.0000兆赫 | 92 毫秒 |
14.7456兆赫 | 100 毫秒 |
11.0592兆赫 | 133 毫秒 |
7.73280兆赫 | 191 毫秒 |
5.52960兆赫 | 266 毫秒 |
1.84320兆赫 | 800 毫秒 |
主要問題是看門狗定時器復位命令(設置 RWT 位)在軟件中的位置。最理想的方法是在系統軟件的主回路中有一個位置,定期重新啟動看門狗計時器。通過主程序循環所需的時間必須小于超時間隔,否則設備將在正常運行期間自行復位。然而,在某些系統中,程序流不夠線性,無法放置單個看門狗定時器復位功能。代碼中應放置多個復位功能,對應于最長的軟件路徑。
通常,系統需要知道是否發生了看門狗定時器復位。WTR 位 (PCON.4) 將在發生這種情況時進行設置,如果發生系統故障,軟件可以在復位序列的早期對此進行測試。如果是這樣,系統可能會決定進入“安全”模式并提醒用戶注意錯誤情況。
看門狗復位示例
下面顯示了一個簡短的程序,說明了看門狗定時器的初始化和基本功能。它說明了定時訪問功能,該功能可防止意外修改看門狗控制位。定時訪問操作是必須按順序一起執行的一系列步驟;否則,訪問將失敗。示例程序顯示了用于重新啟動監視器并啟用其重置的定時訪問。有關定時訪問操作的更多詳細信息,請參閱安全微控制器用戶指南。受定時訪問過程保護的看門狗定時器位是使能看門狗定時器復位 (EWT;PCON.2) 并重新啟動看門狗定時器 (RWT;IP.7) 位。
; WD_RST.ASM Program ; ; This program demonstrates the use of the watchdog timer. ; When running, the program counts on port 1 to indicate the device is ; running and periodically resetting the watchdog timer. After counting ; to 16, it stops resetting the watchdog timer, simulating a system fault. ; ; The program begins by checking to see if the WTR bit is set. If so, the ; reset was caused by the watchdog timer, and the program will execute ; the FAULT subroutine. Port 1 is set to F0h to indicate this condition. ; If the WTR bit is not set, the reset was caused by another source and ; execution should continue normally. ;************************************ RWT EQU 0BFh ;Reset Watchdog Timer bit TA EQU 0C7h ;Timed Access Register PCON EQU 87h ;Power Control Register ACC EQU 0E0h ;Accumulator P1 EQU 090h ;Port 1 ORG 00h ;Reset Vector SJMP START ;************************************ ORG 080h ;Program starts at 80h in this example. START: MOV A, PCON ;If reset was caused by watchdog timeout, JB ACC.4, FAULT ; (WTR bit =1) execute fault subroutine. ;********************************** ;A normal power-on reset has occurred. Start initialization sequence. MOV P1, #00h ;Clear P1 to signal start of program. ;Watchdog timer initialization sequence MOV TA, #0AAh ;First restart the Watchdog timer MOV TA, #055h ; using timed SETB RWT ; access. MOV TA, #0AAh ;Next enable the Watchdog timer reset MOV TA, #055h ; function using timed ORL PCON, #04h ; access. ;********************************** ;Main program loop. This simulates a program that is operating ; correctly and then goes awry. After the program has counted to 16 ; on Port 1 it will skip over the watchdog timer reset function. This ; will simulate a fault and allow the watchdog timer reset to be asserted. ;********************************** MAIN: MOV R1, #0FFh ;Create a delay loop. This simulates LOOP1: MOV R2, #0FFh ; a device actually "doing something." LOOP2: JB P1.4, SKIP_WD_RST ;Have we been through loop 16 times? MOV TA, #0AAh ;Watchdog timer reset. In a user application it MOV TA, #055h ; should be placed at strategic locations SETB RWT ; where it will be executed periodically. SKIP_WD_RST: DJNZ R2, LOOP2 JNZ R1, LOOP1 INC P1 ;Increment counter. SJMP MAIN ;Go back to main program loop. ;************************************ ;Watchdog timeout fault. This subroutine would normally have special ; routines to be executed in the event of a system fault. In this example, ; it disables the watchdog reset and sets Port 1 to F0h to indicate a fault. ; In a real application, this routine could either clear the fault and ; restart the software, or signal a fault and halt further operation. ;************************************ FAULT: MOV P1, #0F0h ;Signal a fault MOV TA, #0AAh ;Disable watchdog timer reset MOV TA, #55h ; using timed ANL PCON, #0FBh ; access. SJMP $ ;Halt further operation.
總結
任何使用看門狗作為監視器的設計都必須考慮許多因素。確定超時期限后,必須分析系統軟件以確定看門狗重新啟動指令的位置。為了進行有效的設計,應將監視程序重新啟動的次數保持在最低限度,并應考慮錯誤執行重新啟動的可能性。如前所述,某些系統軟件過于復雜或依賴于數據,無法確??撮T狗重新啟動涵蓋所有軟件流路徑。這可能要求可能需要自診斷軟件方法。如果存在預期的故障機制,例如周期性EMI突發或電源毛刺,則看門狗超時應考慮此時間段。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7627瀏覽量
151768 -
ESD
+關注
關注
49文章
2055瀏覽量
173177 -
電磁干擾
+關注
關注
36文章
2323瀏覽量
105533
發布評論請先 登錄
相關推薦
評論