1 watchdog的作用及工作原理
1.1 watchdog的作用
在嵌入式控制系統運行時收到外部干擾或者系統錯誤,這時候程序就有可能出現“跑飛”,從而導致整個系統癱瘓。為了防止這種現象的發生,在對系統穩定性要求較高的場合往往要加入看門狗(watchdog)電路或者開啟集成在CPU中的watchdog timer(看門狗定時器)。Watchdog的作用就是當系統“跑飛”而進入死循環的時候,可以復位系統,讓系統繼續重新運行。
1.2 watchdog的工作原理
watchdog原理上就是一個定時器,定時器timer對時鐘進行計數,當定時器溢出時,產生復位信號,使得整個系統復位。其基本原理為:設本系統程序完整運行一周期的時間是tp,看門狗的定時周期為ti,且ti>tp,在程序運行一周期后就修改(再重新設定看門狗的定時周期)定時器的計數值(俗稱“喂狗”),只要程序正常運行,定時器就不會溢出。若由于干擾等原因使系統不能在tp時刻修改定時器的計數值,定時器將在ti時刻溢出,引發系統復位,使系統得以重新運行,從而起到監控作用。
2 S3C2443的watchdog
2.1 watchdog概述
S3C2443的看門狗定時器用于控制器因為噪聲或系統錯誤等故障干擾時恢復控制器系統的正常工作,它能作為通用的16位的定時器來請求中斷服務。看門狗定時器可以產生128個PCLK周期的復位信號
2.2 watchdog的特征
⑴用于中斷請求的通用的定時器模式。
⑵當定時器計數值減到0(計時時間到),激活128PCLK周期的復位信號。
2.3 watchdog定時器的結構圖
圖1
從上圖可知PCLK是看門狗定時器的時鐘源,PCLK經過一個預分頻器后產生合適的看門狗定時器時鐘,這個時鐘經過MUX再次被分頻。這個8位的預分頻值和頻率分頻系數由看門狗定時器控制寄存器(分別由WTCON[15:8]和WTCON[4:3]來確定)。其中有效的預分頻值的范圍是0到28-1,頻率分配系數的值可以是16,32164或128。我們可以用下面的方程式來計算看門狗定時器頻率和每個定時器時鐘周期持續時間。
圖2
2.4 WTDAT和WTCNT寄存器的關系
一旦使能看門狗定時器,看門狗定時器數據寄存器(WTDAT)不能被自動重新裝入到看門狗定時器計數寄存器中(WTCNT),因此,在看門狗定時器開始之前,一個初始值必須被寫入到看門狗定時器計數寄存器中。
圖3
2.5 調試環境考慮因素
當S3C2443在debug模式使用Embedded ICE(in-circuit Emulator)時,不能操作看門狗定時器。看門狗定時器能夠通過CPU內核信號(DBGACK信號)來判斷當前是否工作在debug模式下。一旦CPU內核的DBGACK信號生效,看門狗定時器在計時結束時不會激活復位輸出,這樣就不能復位系統。
2.6 看門狗定時器專用寄存器
⑴看門狗定時器控制(WTCON)寄存器
WTCON寄存器允許用戶使能或關閉看門狗定時器,可以從4個不同的時鐘源中來選擇時鐘信號,可以使能和關閉中端,可以使能和關閉看門狗定時器輸出。看門狗定時器用于在上電后出現故障的情況下來復位重啟S3C2443系統。如果控制器不希望重啟,可以關閉看門狗定時器。如果用戶把看門狗定時用作普通的定時器,就需要使能中斷(WTCON[2])和關閉看門狗定時器(WTCON[5])。
圖4
⑵看門狗定時器數據(WTDAT)寄存器
WTDAT寄存器用于指定超時時間,在初始化看門狗定時器操作的時候(也即第一次初始化時),WTDAT寄存器的內容不能被自動加載到看門狗定時器計數寄存器中(WTCNT),但是使用初始值0x8000可以驅動第一次超時,在這種情況下,WTDAT寄存器的值將自動重新加載到WTCNT寄存器中。
圖5
⑶看門狗定時器計數(WTCNT)寄存器
WTCNT寄存器包含正常操作時看門狗定時器當前的計數值,注意,在看門狗定時器被開始使能的時候WTDAT寄存器的值不能被自動加載到WTCONT寄存器中,所以我們在使能看門狗定時器前要為WTCONT寄存器初始化一個初始值。
圖6
3 WINCE中的初始化代碼
Init.c文件中的OEMInit函數調用OALTimerInit函數,下面是OALTimerInit函數初始化watchdog的代碼
圖7
而SMDKInitWatchDogTimer函數在watchdog.c中實現,如下:
圖8
上圖的喂狗函數RefreshWatchdogTimer在watchdog.c中定義,見圖1,而pfnOEMRefreshWatchDog和dwOEMWatchDogPeriod在WINCE600/public/common/oal/inc/bceoemglobal.h定義,見下圖:
圖9
上圖的pfnRefreshWatchDog,dwWatchDogPeriod和dwWatchDogThreadPriority的定義在在WINCE600/public/common/oal/inc/oemglobal.h中定義,如下
圖10
上一篇:WINCE6.0+S3C2451環境搭建過程遇到的一些問題
下一篇:【嵌入式開發】 ARM 匯編 (指令分類 | 偽指令 | 協處理器訪問指令)
設計資源 培訓 開發板 精華推薦
- 使用 Richtek Technology Corporation 的 RT9986A 的參考設計
- 適用于STM32F439ZI MCU的STM32 Nucleo-144開發板,支持Arduino,ST Zio和morpho連接
- NCP1251GEVB,用于筆記本電腦的 25W、5V、12V AC 到 DC 多輸出電源的評估板
- 使用 Analog Devices 的 LT4276AHUFD 的參考設計
- 負載開關IC TCK321G、TCK322G、TCK323G應用&電路
- ADP2120 降壓穩壓器評估板
- RT9288A LED Driver with PWM Brightness Control (12V to 60V) 典型應用
- SILINKPS-EVB,用于電纜調制解調器應用的 Si3225 用戶線接口的評估板
- 用于線性歐姆表的 TL431A 可編程精密基準的典型應用
- 基于VIPer013BLS的5V/100mA高壓優化降壓轉換器