s3c2410 watchdog (看门狗)
起,以下是feed_dog函数
void feed_dog()
{
}
下面是void enable_watchdog()和feed_dog()配合使用的一个例子
void main()
{
}
在这个例子中我假设了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的操作手册
s3c2410watchdog看门 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)