打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WATCHDOG 定时器 - jammy
userphoto

2010.04.13

关注
 s3c2440的看门狗定时器是当操作发生如噪声干扰、系统错误等故障时重启控制器。看门狗定时器是可以作为一般的16位定时器用于响应中断请求,也可以是用于产生复位信号。

       看门狗定时器的工作频率是将PCLK经过8位预分频器后,再通过16分频、32分频、64分频、或者128分频后得到的。分频可在WTCON中设置。

用下面的公式算出watchdog定时器的工作频率:

看门狗定时器的工作频率

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

Prescaler value = 0~255

Division_factor = {16,32,64,128}

WTDAT & WTCNT

       当看门狗寄存器启动时,看门狗定时器数据寄存器(WTDAT)不能自动重装到定时计数器(WTCNT)。因此,初始值必须在看门狗定时器启动前写入定时计数寄存器(WTCNT)

l         WATCHDOG TIMER CONTROL (WTCON) REGISTER

       该寄存器用于允许/禁止看门狗定时器、中断,四种时钟信号的选择,以及预分频系数的设定。

寄存器

地址

R/W

描述

初始值

WTCON

0x53000000

R/W

看门狗定时控制寄存器

0x8021

 

WTCON

Bit

描述

初始值

Prescaler value

[15:8]

预分频系数,有效范围 0~255

0x80

Reserved

[7:6]

保留位,这两位在普通情况下必需为00

00

Watchdog timer

[5]

允许/禁止看门口定时器

0 = 禁止,1 = 允许

1

Clock select

[4:3]

决定时钟分频器因子

00:16  01:32

10:64  11:128

00

Interrupt generation

[2]

允许/禁止中断

0 = 禁止,1 = 允许

0

Reserved

[1]

保留位,这两位在普通情况下必需为0

0

Reset enable/disable

[0]

允许/禁止看门狗定时器复位信号输出

1:允许在看门狗定时器为0时,产生复位信号

2:禁止看门狗定时器的复位功能

1

 

l         WATCHDOG TIMER DATA (WTDAT) REGISTER

       WTDAT寄存器用于设置看门狗定时持续时间。在初始化看门狗定时器WTDAT的数值不能自动重载到定时计数器。但是,当计数到0时,WTDAT会自动重载到WTCNT

寄存器

地址

R/W

描述

初始值

WTDAT

0x53000004

R/W

看门狗定时数据寄存器

0x8000

 

WTDAT

Bit

描述

初始值

Count reload value

[15:0]

重载看门狗定时计数值

0x8000

 

l         WATCHDOG TIMER COUNT (WTCNT) REGISTER

       WTCNT寄存器是当前看门狗定时器正常工作下的数值。注意,WTDAT寄存器的数值在初始化时不能重在到WTCNT寄存器,因此WTCNT寄存器需要在启动看门狗前设置好初始值。

寄存器

地址

R/W

描述

初始值

WTCNT

0x53000008

R/W

看门狗定时计数寄存器

0x8000

 

WTDAT

Bit

描述

初始值

Count reload value

[15:0]

重载看门狗定时计数值

0x8000

 

演示程序:

       启动看门狗定时器后,程序进入LED闪烁循环,并且显示WTCNT的数值。当WTCNT0时候,系统重启。

 

/******************************************************

函数名:void init_watchdog(void)

  :jammy-lee

创建日期:2009-02-21

  :初始化看门狗定时器

******************************************************/

void init_watchdog(void)

{

       rWTCON = ((0x60<<8)|(3<<3));              //设置预分频值0x60,分频因子128

       rWTDAT = 0x6000;

       rWTCNT = 0x6000;

       rWTCON &= ~(1<<2);                      //禁止中断

       rWTCON |= ((1<<5)|(1<<0));            //启动看门狗,允许复位信号

}

 

/******************************************************

函数名:void Main(void)

  :jammy-lee

创建日期:2009-02-21

  :   主函数

******************************************************/

void Main(void)

{

       int wt_count;

       rGPBCON = 0x55555;

       rGPBUP = 0x7ff;

       while(1)

       {

              Led(1,1);

              Uart_Printf("LED 1 power ON\n");

              delay(100);  

              Led(1,0);

              Uart_Printf("LED 1 power ON\n");

              delay(100);

              wt_count = rWTCNT;  //读取WTCNT寄存器当前的值

              Uart_Printf("the value of WTCNT is %d\n",wt_count); 

       }

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux嵌入式系统开发之看门狗---驱动篇
watchdog 原理
Linux驱动修炼之道
WatchDog驱动程序
u-boot 分析(五)
关于MSP430的学习总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服