微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > s3c2410 watchdog (看门狗)

s3c2410 watchdog (看门狗)

时间:11-20 来源:互联网 点击:

起,以下是feed_dog函数

void feed_dog()
{
rWTCNT=0x8000;
}

下面是void enable_watchdog()和feed_dog()配合使用的一个例子

void main()
{
init_system();
.
...
.....
enable_watchdog();
.
...
.....
while(1)
{
feed_dog();
}
}
在这个例子中我假设了main函数是系统的主函数,在做完一系列系统初始化之后enable_watchdog()函数被调用,此时watchdog被启动,下面的while循环则是不断的进行feed_dog,使系统不发生重起。当然在实际应用中不可能采取这种架构来对watchdog进行操作,一般来说feed_dog函数的调用是被安插在定时器的中断服务例程中,当然,定时器的time out(注意是定时器的time out,不是watchdog的 time out)时间长度必须合适,否则在定时器还没来得及发生中断调用feed_dog函数之前,watchdog已经time out了,那也将引起系统重起.

注1:事实上,WTDAT和WTCNT这两个寄存器在系统上电之后会被硬件自动的填入两个初始值0x8000,开启watchdog之后, WTCNT并没有马上就把WTDAT中的值装入,而是使用初始值0x8000。在发生第一次time out之后,WTDAT寄存器中的值才会被真正的装载进WTCNT寄存器中。

注2:t_watchdog可根据公式对其进行计算:
t_watchdog= 1/ (PCLK / (Prescaler value + 1) / Division_factor)
Prescaler Value位于寄存器WTCON的8至15位,其值为0~255
Division_factor由寄存器WTCON中的3~4位(Clock Select)决定,其值可以为00,01,10,11分别代表Division_factor的值为16,32,64,128

关于各个寄存器的详细信息请参考s3c2410的操作手册

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top