|
看門狗應用實驗
1、實驗目的
了解watchdog 的作用
掌握S3C2410 的watchdog 定時器的使用方法
2、實驗內容
實現看門狗復位
編程實現看門狗喂狗
3、實驗設備
S3C2410 開發板
ADS1.2 集成開發環境,JTAG 調試器、串口連接線
4、實驗原理
4.1 看門狗功能簡述
嵌入式系統運行時受到外部干擾或者系統錯誤,程序有時會出現“跑飛”,導致整個系統癱瘓。為了防止這一現象的發生,在對系統穩定性要求較高的場合往往要加入看門狗 (watchdog )電路。看門狗的作用就是當系統“跑飛”而進入死循環時,恢復系統的運行。
4.2 看門狗的工作原理
其基本原理為:設本系統程序完整運行一周期的時間是Tp,看門狗的定時周期為Ti,Ti>Tp,在程序正常運行時,定時器就不會溢出,若由于干擾等原因使系統不能在Tp時刻修改定時器的記數值,定時器將在Ti 時刻溢出,引發系統復位,使系統得以重新運行,從而起到監控的作用。
4.3S3C2410 的看門狗
S3C2410 的看門狗定時器有兩個功能:
作為常規時鐘,并且可以產生中斷;
作為看門狗定時器使用,當時鐘計數減為0 (超時)時,它將產生一個128 個時鐘
周期(PCLK )的復位信號。
主要特性如下:
通用的中斷方式的16bit 定時器。
當計數器減到0 (發生溢出),產生128 個PCLK 周期的復位信號。
下圖為看門狗的電路示意圖,看門狗時鐘使用PCLK 作為他的時鐘源,PCLK 通過預分頻產生適合的看門狗時鐘。
看門狗模塊包括一個預比例因子放大器,一個是四分頻器,一個16bit 計數器。看門狗的時鐘源來自PCLK,為了得到較寬范圍的看門狗信號,PCLK 先被預分頻,之后再經過分 頻器分頻。預分頻比例因子的分頻值,都可以由看門狗控制器(WTCON )決定,預分頻值 的有效范圍從0 到256-1。分頻因子可以選擇16、32、64 或者128。
看門狗定時器記數值的計算公式如下:
t_watchdog=1/ [PCLK/( prescaler value +1)/ Division_factor ]
實驗中PCLK=50MHz;prescaler =WTCON[15:8]=100;clock division factor=128
t_watchdog= 0.00025856
看門狗的定時周期為T=WTCH ×t_watchdog
調試環境下的看門狗
當S3C2410 用嵌入式ICE 調試的時候,看門狗定時器的復位功能不能啟動,看門狗定時器能從CPU 內核信號判斷出當前CPU 是否處于調試狀態,如果看門狗定時器確定當前模 式是調試模式,盡管看門狗能產生溢出信號,但是仍然不會產生復位信號。
5、S3C2410 相關寄存器
WTCON――看門狗定時器控制寄存器
看門狗控制寄存器能夠禁止或者允許看門狗時鐘,從四個不同的時鐘源中挑選時鐘信號,允許或禁止中斷,并且能允許或禁止看門狗時鐘輸出。如果用戶想要使用看門狗作為普 通時鐘,應該中斷使能,禁止看門狗定時器復位。
WTDAT――看門狗定時器數據寄存器
WTDAT 用于設置看門狗定時器的超時時間值,在初始化看門狗過程中,WTDAT 的值不會自動加載到定時計數器中,首次使用定時器超時值為其初始值即0x8000,以后該寄存器的值會被自動加載到WTCNT 寄存器中。
WTCNT――看門狗定時器計數寄存器
WTCNT 為看門狗定時器工作的時間計數器的當前計數值,注意在初始化看門狗操作后,看門狗數據寄存器(WTDAT )的值不能自動裝載到看門狗計數寄存器(WTCNT )中, 所以看門狗被允許之前應高初始化看門狗計數寄存器的值。
6、看門狗應用編程實現
由于看門狗是對系統的復位或者中斷的操作,所以不需要外圍的硬件電路。要實現看門狗的功能,只需要對看門狗的寄存器組進行操作。即對看門狗的控制寄存器(WTCON )、 看門狗數據寄存器(WTDAT )、看門狗計數寄存器(WTCNT )的操作。
設計流程如下:
設置看門狗中斷操作,包括全局中斷和看門狗中斷的使能,看門狗中斷向量的定義。
對看門狗控制寄存器(WTCON )的設置,包括設置預分頻比例因子、分頻器的分
頻值、中斷使能和復位使能等。
對看門狗數據寄存器(WTDAT )和看門狗技術寄存器(WTCNT )的設置。
啟動看門狗定時器。
6.1 主功能函數
/*************************************************
Function name: Main
Parameter : void
Description : 主功能函數
Return : void
Argument : void
Autor & date :
**************************************************/
int Main(void)
{
SetClockDivider(1, 1);//FLCK:HCLK:PCLK=1:2:4
SetSysFclk(DFT_FCLK_VAL);//Fout=200MHZ
Port_Init();
Uart_Select(0);
Uart_Init(0, UART_BAUD);
Uart_Printf("watchdog test is beginning\n");
watchdog_test();
}
6.2 看門狗測試程序
void watchdog_test(void)
{
//initialize interrupt registers
ClearPending(BIT_WDT);
//建立WatchDog 中斷
pISR_WDT=(unsigned)watchdog_int;
//Prescaler value=100、clock division factor=128
//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856
//disable watchdog
4
----------------------- Page 5-----------------------
rWTCON=((100<<8)|(3<<3));
//看門狗時鐘周期T=WTCNT*t_watchdog=4S
//看門狗喂狗
rWTDAT=15000;
rWTCNT=15000;
rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt
rWTCON|=((1<<5)|(1<<2)|1);//watchdog 復位,時間間隔為4S。
//rWTCON|=(1<<5)|(1<<2);//每4S watchdog 一次中斷。
//設置watchdog 為IRQ 中斷模式
rINTMOD&=0xFFFFFDFF;
//開中斷
EnableIrq(BIT_WDT);
while(f_ucSencondNo<11);
}
6.3 看門狗中斷服務程序
/**** watchdog_init ****/
void __irq watchdog_int(void)
{
//清除中斷
ClearPending(BIT_WDT);
f_ucSencondNo++;
if(f_ucSencondNo<11)
Uart_Printf("%ds",f_ucSencondNo);
else
{
//mask watchdog timer interrupt
DisableIrq(BIT_WDT);
Uart_Printf("watch dog is ok\n");
}
}
7、實驗過程
運行該程序后,將會在一段時間后自動產生一個復位信號,自動啟動開發板。
|
-
-
看門狗應用實驗.pdf
2018-5-17 11:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
104.13 KB, 下載次數: 16, 下載積分: 黑幣 -5
|