实验5-2看门狗实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验5-2看门狗定时器应用实验1、实验目的�了解watchdog的作用�掌握S3C2410A的watchdog定时器的使用方法2、实验内容�实现看门狗复位�编程实现看门狗喂狗3、实验设备�S3C2410A开发板�ADS1.2集成开发环境,ARM仿真器、串口连接线4、实验原理4.1看门狗功能简述嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗(watchdog)电路。看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。4.2看门狗的工作原理其基本原理为:设本系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,TiTp,在程序正常运行时,定时器就不会溢出,若由于干扰等原因使系统不能在Tp时刻修改定时器的记数值,定时器将在Ti时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控的作用。4.3S3C2410A的看门狗S3C2410A的看门狗定时器有两个功能:�作为常规时钟,并且可以产生中断;�作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128个时钟周期(PCLK)的复位信号。主要特性如下:�通用的中断方式的16bit定时器。�当计数器减到0(发生溢出),产生128个PCLK周期的复位信号。下图为看门狗的电路示意图,看门狗时钟使用PCLK作为他的时钟源,PCLK通过预分频产生适合的看门狗时钟。看门狗模块包括一个预比例因子放大器,一个是四分频器,一个16bit计数器。看门狗的时钟源来自PCLK,为了得到较宽范围的看门狗信号,PCLK先被预分频,之后再经过分频器分频。预分频比例因子的分频值,都可以由看门狗控制器(WTCON)决定,预分频值的有效范围从0到256-1。分频因子可以选择16、32、64或者128。看门狗定时器记数值的计算公式如下:t_watchdog=1/[PCLK/(prescalervalue+1)/Division_factor]看门狗的定时周期为T=WTCH×t_watchdog一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值不能被自动的装载到看门狗计数器(WTCNT)中。因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中。调试环境下的看门狗当S3C2410A用嵌入式ICE调试的时候,看门狗定时器的复位功能不能启动,看门狗定时器能从CPU内核信号判断出当前CPU是否处于调试状态,如果看门狗定时器确定当前模式是调试模式,尽管看门狗能产生溢出信号,但是仍然不会产生复位信号。5、S3C2410A相关寄存器WTCON――看门狗定时器控制寄存器看门狗控制寄存器能够禁止或者允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁止中断,并且能允许或禁止看门狗时钟输出。如果用户想要使用看门狗作为普通时钟,应该中断使能,禁止看门狗定时器复位。WTDAT――看门狗定时器数据寄存器WTDAT用于设置看门狗定时器的超时时间值,在初始化看门狗过程中,WTDAT的值不会自动加载到定时计数器中,首次使用定时器超时值为其初始值即0x8000,以后该寄存器的值会被自动加载到WTCNT寄存器中。WTCNT――看门狗定时器计数寄存器WTCNT为看门狗定时器工作的时间计数器的当前计数值,注意在初始化看门狗操作后,看门狗数据寄存器(WTDAT)的值不能自动装载到看门狗计数寄存器(WTCNT)中,所以看门狗被允许之前应该初始化看门狗计数寄存器的值。6、实验程序由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需要对看门狗的寄存器组进行操作。即对看门狗的控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。设计流程如下:�设置看门狗中断操作,包括全局中断和看门狗中断的使能,看门狗中断向量的定义。频值、中断使能和复位使能等。�对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置。�启动看门狗定时器。6.1主功能函数intMain(void){ChangeClockDivider(1,1);ChangeMPllValue(0xa1,0x3,0x1);Port_Init();Uart_Select(0);Uart_Init(0,115200);Uart_Printf(watchdogtestisbeginning\n);watchdog_test();while(1);}6.2看门狗复位功能程序实现voidwatchdog_test(void){//Prescalervalue=100;lockdivisionfactor=128;PCLK=67.5MHz//t_watchdog=1/[PCLK/(Prescalervalue+1)/Division_factor]=0.0002//disablewatchdogrWTCON=((1008)|(33));//看门狗时钟周期T=WTCNT*t_watchdog=3S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;//disablewatchdoginterruptrWTCON&=~(31);//enableWatchdogtimer;resetsignal.rWTCON|=((15)|(10));while(1);}6.3看门狗定时器功能程序实现voidwatchdog_test(void){{//initializeinterruptregistersClearPending(BIT_WDT);//建立WatchDog中断pISR_WDT=(unsigned)watchdog_int;//Prescalervalue=100、clockdivisionfactor=128//t_watchdog=1/[PCLK/(Prescalervalue+1)/Division_factor]=0.00025856//disablewatchdogrWTCON=((1008)|(33));//看门狗时钟周期T=WTCNT*t_watchdog=4S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=((15)|(12));//enableWatchdogtimerangwatchdoginterrupt//rWTCON|=((15)|(12)|1);//watchdog复位,时间间隔为4S。rWTCON|=(15)|(12);//每4Swatchdog一次中断。//设置watchdog为IRQ中断模式rINTMOD&=0xFFFFFDFF;//开中断EnableIrq(BIT_WDT);while(f_ucSencondNo11);}/****watchdog_int****/void__irqwatchdog_int(void){//清除中断ClearPending(BIT_WDT);f_ucSencondNo++;if(f_ucSencondNo11)Uart_Printf(%ds,f_ucSencondNo);else{//maskwatchdogtimerinterruptDisableIrq(BIT_WDT);Uart_Printf(watchdogisok\n);}}7、实验步骤1.连接好实验环境,将仿真器的一端通过并口连接到PC机,将仿真器的另一端通过JTAG线连接到GEC2410的JTAG接口。2.将串口线一端接到PC机,另一端接到GEC2410的UART0接口(即P1口);打开串口超级终端dnw.exe,设置串口BaudRate为115200,选择COM1。3.重起GEC2410,开发板会执行flash中的BIOS程序,选择GEC2410_Watchdog目录下的可执行映象文件GEC2410_Watchdog.bin将该文件下载到SDRAM。4.下载结束后,会提示是否要立即运行,这时输入“Y”,执行GEC2410_Watchdog.bin。5.在dnw中观察实验结果。注意:如果做看门狗复位功能实验,打开ADSCodeWarrior,在ADSCodeWarrior中打开实验工程GEC2410_Watchdog.mcp;将文件watchdog_reset.c加载到工程中,删除watchdog.c文件,并对工程进行编译。然后在对新的GEC2410_Watchdog.bin按照上述方法下载到SDRAM内调试,运行映象文件,从串口观察实验结果,经过几秒钟开发板重新启动,串口输出bios字符。8、实验结果1、观察看门狗定时器功能。2、观察看门狗复位功能。

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功