资源描述:
《S3C2440看门狗定时器(推荐)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、看门狗定时器的主要作用当程序因为干扰而跑飞后,能够使系统复位。从而防止系统跑飞,提高系统稳定性。先来说说看门狗的工作原理:设本系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常运行时,定时器就不会溢出,若由于干扰等原因使系统不能在Tp时刻修改定时器的记数值,定时器将在Ti时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控的作用。看门狗设计步骤:1,设置看门狗中断操作,包括全局中断操作和看门狗中断的使能,看门狗中断向量的定义。[html]viewplaincopypri
2、nt?1.#definerINTMSK(*(volatileunsigned*)0x4a000008)//Interruptmaskcontrol2.#definerINTSUBMSK(*(volatileunsigned*)0x4a00001c)//Interruptsubmask#definerINTMSK(*(volatileunsigned*)0x4a000008)//Interruptmaskcontrol#definerINTSUBMSK(*(volatileunsigned*)0x4a000
3、01c)//Interruptsubmask[html]viewplaincopyprint?1.//开中断2.rINTMSK&=~(BIT_WDT_AC97);3.rINTSUBMSK&=~(BIT_SUB_WDT);//开中断rINTMSK&=~(BIT_WDT_AC97);rINTSUBMSK&=~(BIT_SUB_WDT);2,对看门狗控制寄存器WTCON设置,包括设置预分频比例因子,分频器的分频值,中断使能,复位使能。WTCON相关位的作用可从下图看出:其中t_watchdog的计算方法为:如预
4、分频值=100;时钟除数因子=128;PCLK=67.5MHz,则定时器时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]=1/[67.5*1000000/(100+1)/128]=0.0002预分频值,时钟除数因子的范围如下:[html]viewplaincopyprint?1.rWTCON=((100<<8)
5、(3<<3));//预分频值=100;时钟除数因子=128;rWTCON=((100<<8)
6、(3<<3));//预分频值=100;时钟除数因子=128;[ht
7、ml]viewplaincopyprint?1.rWTCON
8、=(1<<0);//允许复位rWTCON
9、=(1<<0);//允许复位3,启动看门狗。[html]viewplaincopyprint?1.rWTCON
10、=((1<<5)
11、(1<<2));//允许看门狗定时器和允许中断产生rWTCON
12、=((1<<5)
13、(1<<2));//允许看门狗定时器和允许中断产生4,喂狗,即对WTDAT看门狗数据寄存器和WTCNT看门狗计数寄存器的设置。这要在在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器
14、重新开始计时。而不至于引起系统复位。[html]viewplaincopyprint?1.rWTDAT=20000;//WTDAT看门狗数据寄存器,看门狗定时器重载的计数值2.rWTCNT=20000;//WTCNT看门狗计数寄存器,看门狗定时器当前计数值3.//看门狗时钟中断周期T=WTCNT*t_watchdog=4SrWTDAT=20000;//WTDAT看门狗数据寄存器,看门狗定时器重载的计数值rWTCNT=20000;//WTCNT看门狗计数寄存器,看门狗定时器当前计数值//看门狗时钟中断周期T
15、=WTCNT*t_watchdog=4Swatchdog.c实现看门狗功能,防止程序跑飞:[html]viewplaincopyprint?1.//*********************************************2.//看门狗定时器函数3.voidwatchdog_timer(void)4.{5.//清WatchDog中断寄存器6.rSRCPND
16、=BIT_WDT_AC97;7.rINTPND
17、=BIT_WDT_AC97;8.rSUBSRCPND
18、=BIT_SUB_WDT;9.1
19、0.//建立WatchDog中断11.pISR_WDT_AC97=(unsigned)Watchdog_ISR;12.13.14.rWTCON=((100<<8)
20、(3<<3));//预分频值=100;时钟除数因子=128;15.//PCLK=67.5MHz,不允许中断16.//每个定时器时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]17.//=1/[67.5*1000000/(100+1)/