西比爱斯

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

H8中有5个时钟,1个看门狗。看门狗电路和interval时钟是同一个电路,所以在使用看门狗的时候,只能指派别的时钟充当interval的功能。看门狗共有8种输入时钟,分别是主频的2,32,64,128,256,512,2048,4096分之一,在溢出时可以生成内部复位信号或者是中断。

 

H8看门狗有三个寄存器进行控制,计数寄存器TCNT,控制寄存器TCSR和状态寄存器RSTCSR。从控制步骤上来说:

第一步就是将看门口关闭,以备之后设置使用。

第二步,设置看门狗的起始数字,时钟频率,工作模式。

第三步,开启看门狗。

 

关闭看门狗:

TCSR的TME为0时看门狗关闭,为1时开启

 

设置起始数字

8位TCNT的数字就是起始数字

 

工作模式

TCSR的WT\IT为1则工作在看门狗模式,为0工作在内部时钟模式

TCSR的低三位选择分频率

0 0 0 : 2

0 0 1 : 32

0 1 0 : 64

1 0 0 : 128

1 0 1 : 512

1 1 0 : 2018

1 1 1 : 4096

 

启动看门狗

TCSR的TME为1时开启

 

这样就可以启动看门狗了,但是还有两个很重要的位没有提过,那就是状态相关的。TCSR的第7位,VOF。它在看门狗溢出后被置为1,可以当做判断溢出的状态位。它需要在1时,被读后写进0去清除。另一个是状态寄存器中唯一可用的位:WRST。它也是在复位的时候为1,但是不同的是,在硬件复位的时候为0,在看门狗这种内部复位的时候变成1,所以可以用来判断是哪种复位发生了。

 

来看看代码:

头文件,定义内存指针

1 typedef union
2 {
3 unsigned char byte;
4 struct
5 {
6 unsigned char CKS :3;
7 unsigned char :2;
8 unsigned char TME :1;
9 unsigned char WT_IT:1;
10 unsigned char OVF :1;
11 }BIT;
12 }WDT_TCSR;
13
14 typedef union
15 {
16 unsigned char byte;
17 struct
18 {
19 unsigned char reserved:7;
20 unsigned char WRST :1;
21 }BIT;
22 }WDT_RSTCSR;
23
24  #define WRITE_WDT_TCSR(X) ((*(volatile unsigned int *)0xFFFFA8) = 0xA500 + X)
25  #define WRITE_WDT_TCNT(X) ((*(volatile unsigned int *)0xFFFFA8) = 0x5A00 + X)
26  #define WRITE_WDT_RSTCSR(X) ((*(volatile unsigned int *)0xFFFFAA) = 0x5A00 + X)
27  #define READ_WDT_RSTCSR() (*(volatile WDT_RSTCSR *)0xFFFFAB)
28  #define READ_WDT_TCSR() (*(volatile WDT_TCSR *)0xFFFFA8)

 

C文件

 

1 void main()
2 {
3 int nIndex ;
4
5 Init() ;
6 Sleep(0x0FF) ;
7
8 WRITE_WDT_TCSR(0x0); /* 关闭看门狗 */
9 WRITE_WDT_TCNT(0x00); /* 从0开始增加,到0xFF时溢出 */
10 WRITE_WDT_TCSR(0x7F); /* 看门狗模式,时钟为4096分频,开启!*/
11
12 while(1)
13 {
14 WRITE_WDT_TCNT(0x00);

关于设置TCSR,TCNT,RSTCSR三个寄存器都需要特别的方法

即,设置TCSR和TCNT的地址都是一样的(读取的时候不一样),必须使用WORD模式设置,BYTE设置时无效的。设置TCNT时,上位是5A,设置TCSR时,上位是A5。

同样,设置RSTCSR也有同样的限制,上位是A5时才能进行设置。

计算时间的方法:

H8的看门狗是从TCNT到0xFF之间,设为N则

重启时间=(0xFF-N)*(分频数/主频)

如果分频为4096,主频为25M,想要把重启时间定位18毫秒则有

0.018 = (0xFF - N) * (4096 / 25000000)

N = 93

 

总结:

对于WDT编程,首先要知道自己的芯片的看门狗的频率,设置方法,剩下的事情都比较简单。

(以上)

posted on 2009-12-18 10:45  西比爱斯  阅读(343)  评论(0)    收藏  举报