欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

第二部分:S5PV210_关看门狗_1

发布时间:2025/6/17 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 第二部分:S5PV210_关看门狗_1 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.关看门狗

(1)什么是看门狗?

  看门狗就好像你家门口的一条狗,我们必须在规定的时间内去喂狗,如果经过了规定的时间,你还不去喂狗的话,它就会咬死你。

  看门狗本质上是一个定时器,首先,你给看门狗设置好一段时间,然后看门狗就开始计时,CPU必须在这段时间过去之前重置看门狗内的时间,好让他重新计时,如果cpu不去重置看门狗内的时间的话,看门狗就会重启整个系统或者产生一个中断,当我们系统正常运行的时候,我们当然不希望重启系统啦,所以,我们就要喂狗(重置它里面的值)。

(2)看门狗的作用:监督,维护好系统,看系统是否正常运转。

  在一些比较恶劣的环境的情况下,当我们的系统坏的时候,我们没有办法人工重启的时候,看门狗就可以帮助我们重启系统。因为,系统坏了,CPU就不会去喂狗,不喂狗,看门狗到了那个时间后,就会触发重启,系统就自动重启了。

(3)为什么要关看门狗?

  因为现在我们人工用着这机器,当然不需要看门狗了,因为,系统崩溃了,我们会自己重启它,所以,我们现在需要关闭看门狗的功能。

(4)看门狗相关的寄存器

WTCON:看门狗主要功能的设置,如开/关看门狗,使能中断,使能重启,设置时钟分频多少等等。

WTDAT:看门狗重载的计数值

WTCNT:看门狗当前的计数值,看门狗计时时的当前值。

WTCLRINT:清中断,写1进去就清除中断

  WTDAT寄存器和WTCNT寄存器的关系:看门狗刚开始启动的时候,WTDAT的值是不会自动重载到WTCNT的这里WTDAT的值自动重载进WTCNT内是仅发生在中断的情况下的,发生完中断后,WTDAT的值就会自动重载进WTCNT内,然后WTCNT开始自动减1,开始下一次计时。不会发生在重启的原因是:重启的时候,断电,一切寄存器内的值都不存在了,并且重启的时候也不需要自动重载,因为它又经过了一次初始化,用初始化的值就可以了。),因此,在启动看门狗之前,我们必须写一个初始值给WTCNT寄存器。

(5)看门狗时钟分频的介绍

  来源是PCLK(66MHz),经过一个预分频器,再经过一个MUX开关,就得到了看门狗的时钟频率了。

计算公式:

以下面代码为例:t_watchdog = 1/(66M/(65+1))/128) = 128us

(6)写相关寄存器的代码示例

1 void wdt_init_interrupt(void) 2 { 3 //首先,我们就设置预分频器(8~15),先清零,然后再设置值为66,因为时钟源是PCLK(66MHz)得到1MHz 4 rWTCON &= ~(0xff<<8); 5 rWTCON |= (65<<8); 6 7 //然后设置分频器(3~4),先清零,然后设置值为128,得到周期是128us 8 rWTCON &= ~(0x3<<3); 9 rWTCON |= (0x3<<3); 10 11 //然后就选择中断模式了(2),关闭复位模式(0) 12 rWTCON |= (1<<2); 13 rWTCON &= ~(1<<0); 14 15 //设置计数值了,就设置为1.28s 16 rWTDAT = 10000; 17 rWTCNT = 10000; 18 19 //最后,都设置好了,就开启看门狗定时器了(5) 20 rWTCON |= (1<<5); 21 } 22   rWTCLRINT = 1; //清中断,这里是设置任意数就可以清零了

还有喂狗的操作是写WTCNT寄存器的:

void feed_dog(void) {rWTCNT= 10000; }

参考来源:朱老师物联网大教程

转载于:https://www.cnblogs.com/nibuyaoni/p/5716959.html

总结

以上是生活随笔为你收集整理的第二部分:S5PV210_关看门狗_1的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。