WINCE6.0+S3C2443下WatchDog学习
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.01.22
類別:WINCE OAL開發
?
********************************LoongEmbedded********************************?
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
?
?
ARM之看門狗
http://blog.csdn.net/genglei1022/archive/2010/05/15/5594634.aspx
?
嵌入式系統之WATCHDOG(看門狗)概述
http://blog.csdn.net/Chenah/archive/2009/09/22/4575434.aspx
?
看門狗watchdog的理解
http://blog.csdn.net/dadalan/archive/2008/09/14/2803318.aspx
?
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的WINCE6.0+S3C2443下WatchDog学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE基于MC8630的3G模块的控
- 下一篇: WINCE6.0+S3C2443下的ac