看门狗定时器参考资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

看门狗定时器参考资料:

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/( prescaler value +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)的操作. 设计流程如下: 设置看门狗中断操作, 包括全局中断和看门狗中断的使能, 看门狗中断向量的定义. 对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子,分频器的分

频值,中断使能和复位使能等. 对看门狗数据寄存器(WTDAT)和看门狗技术寄存器(WTCNT)的设置. 启动看门狗定时器.

6.1 主功能函数

int Main(void) {

ChangeClockDivider(1,1);

ChangeMPllValue(0xa1,0x3,0x1);

Port_Init();

Uart_Select(0);

Uart_Init(0,115200);

Uart_Printf("watchdog test is beginning\n");

watchdog_test();

while(1); }

6.2 看门狗复位功能程序实现

void watchdog_test(void) {

//Prescaler value=100; lock division factor=128 ;PCLK=67.5MHz

//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002

//disable watchdog

rWTCON=((100<<8)|(3<<3));

//看门狗时钟周期T=WTCNT*t_watchdog=3S

//看门狗喂狗

rWTDAT=15000;

rWTCNT=15000;

//disable watchdog interrupt

rWTCON &= ~(3<<1);

//enable Watchdog timer;reset signal.

rWTCON|=((1<<5)|(1<<0));

while(1); }

6.3 看门狗定时器功能程序实现

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

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);

}

相关文档
最新文档