WINCE6.0+S3C2443下WatchDog学习
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.01.22
類別:WINCE OAL開發(fā)
?
********************************LoongEmbedded********************************?
1?watchdog的作用及工作原理
1.1??watchdog的作用
在嵌入式控制系統(tǒng)運行時收到外部干擾或者系統(tǒng)錯誤,這時候程序就有可能出現(xiàn)“跑飛”,從而導(dǎo)致整個系統(tǒng)癱瘓。為了防止這種現(xiàn)象的發(fā)生,在對系統(tǒng)穩(wěn)定性要求較高的場合往往要加入看門狗(watchdog)電路或者開啟集成在CPU中的watchdog timer(看門狗定時器)。Watchdog的作用就是當(dāng)系統(tǒng)“跑飛”而進(jìn)入死循環(huán)的時候,可以復(fù)位系統(tǒng),讓系統(tǒng)繼續(xù)重新運行。
1.2??watchdog的工作原理
watchdog原理上就是一個定時器,定時器timer對時鐘進(jìn)行計數(shù),當(dāng)定時器溢出時,產(chǎn)生復(fù)位信號,使得整個系統(tǒng)復(fù)位。其基本原理為:設(shè)本系統(tǒng)程序完整運行一周期的時間是tp,看門狗的定時周期為ti,且ti>tp,在程序運行一周期后就修改(再重新設(shè)定看門狗的定時周期)定時器的計數(shù)值(俗稱“喂狗”),只要程序正常運行,定時器就不會溢出。若由于干擾等原因使系統(tǒng)不能在tp時刻修改定時器的計數(shù)值,定時器將在ti時刻溢出,引發(fā)系統(tǒng)復(fù)位,使系統(tǒng)得以重新運行,從而起到監(jiān)控作用。
?
2????????S3C2443的watchdog
2.1??watchdog概述
S3C2443的看門狗定時器用于控制器因為噪聲或系統(tǒng)錯誤等故障干擾時恢復(fù)控制器系統(tǒng)的正常工作,它能作為通用的16位的定時器來請求中斷服務(wù)。看門狗定時器可以產(chǎn)生128個PCLK周期的復(fù)位信號
?
2.2??watchdog的特征
⑴用于中斷請求的通用的定時器模式。
⑵當(dāng)定時器計數(shù)值減到0(計時時間到),激活128PCLK周期的復(fù)位信號。
?
2.3??watchdog定時器的結(jié)構(gòu)圖
?
圖1
從上圖可知PCLK是看門狗定時器的時鐘源,PCLK經(jīng)過一個預(yù)分頻器后產(chǎn)生合適的看門狗定時器時鐘,這個時鐘經(jīng)過MUX再次被分頻。這個8位的預(yù)分頻值和頻率分頻系數(shù)由看門狗定時器控制寄存器(分別由WTCON[15:8]和WTCON[4:3]來確定)。其中有效的預(yù)分頻值的范圍是0到28-1,頻率分配系數(shù)的值可以是16,32164或128。我們可以用下面的方程式來計算看門狗定時器頻率和每個定時器時鐘周期持續(xù)時間。
?
圖2
2.4??WTDAT和WTCNT寄存器的關(guān)系
一旦使能看門狗定時器,看門狗定時器數(shù)據(jù)寄存器(WTDAT)不能被自動重新裝入到看門狗定時器計數(shù)寄存器中(WTCNT),因此,在看門狗定時器開始之前,一個初始值必須被寫入到看門狗定時器計數(shù)寄存器中。
?
圖3
2.5??調(diào)試環(huán)境考慮因素
當(dāng)S3C2443在debug模式使用Embedded ICE(in-circuit Emulator)時,不能操作看門狗定時器。看門狗定時器能夠通過CPU內(nèi)核信號(DBGACK信號)來判斷當(dāng)前是否工作在debug模式下。一旦CPU內(nèi)核的DBGACK信號生效,看門狗定時器在計時結(jié)束時不會激活復(fù)位輸出,這樣就不能復(fù)位系統(tǒng)。
?
2.6??看門狗定時器專用寄存器
⑴看門狗定時器控制(WTCON)寄存器
WTCON寄存器允許用戶使能或關(guān)閉看門狗定時器,可以從4個不同的時鐘源中來選擇時鐘信號,可以使能和關(guān)閉中端,可以使能和關(guān)閉看門狗定時器輸出。看門狗定時器用于在上電后出現(xiàn)故障的情況下來復(fù)位重啟S3C2443系統(tǒng)。如果控制器不希望重啟,可以關(guān)閉看門狗定時器。如果用戶把看門狗定時用作普通的定時器,就需要使能中斷(WTCON[2])和關(guān)閉看門狗定時器(WTCON[5])。
?
圖4
⑵看門狗定時器數(shù)據(jù)(WTDAT)寄存器
WTDAT寄存器用于指定超時時間,在初始化看門狗定時器操作的時候(也即第一次初始化時),WTDAT寄存器的內(nèi)容不能被自動加載到看門狗定時器計數(shù)寄存器中(WTCNT),但是使用初始值0x8000可以驅(qū)動第一次超時,在這種情況下,WTDAT寄存器的值將自動重新加載到WTCNT寄存器中。
?
圖5
⑶看門狗定時器計數(shù)(WTCNT)寄存器
WTCNT寄存器包含正常操作時看門狗定時器當(dāng)前的計數(shù)值,注意,在看門狗定時器被開始使能的時候WTDAT寄存器的值不能被自動加載到WTCONT寄存器中,所以我們在使能看門狗定時器前要為WTCONT寄存器初始化一個初始值。
?
圖6
?
3????????WINCE中的初始化代碼
Init.c文件中的OEMInit函數(shù)調(diào)用OALTimerInit函數(shù),下面是OALTimerInit函數(shù)初始化watchdog的代碼
?
圖7
而SMDKInitWatchDogTimer函數(shù)在watchdog.c中實現(xiàn),如下:
?
圖8
上圖的喂狗函數(shù)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
?
嵌入式系統(tǒng)之WATCHDOG(看門狗)概述
http://blog.csdn.net/Chenah/archive/2009/09/22/4575434.aspx
?
看門狗watchdog的理解
http://blog.csdn.net/dadalan/archive/2008/09/14/2803318.aspx
?
?
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的WINCE6.0+S3C2443下WatchDog学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE基于MC8630的3G模块的控
- 下一篇: WINCE6.0+S3C2443下的ac