uboot启动时,当将cpu运行模式设置为管理模式后,就要关闭看门狗了,那么看门狗是干什么的呢/p>
狗狗是我们的好朋友,有时候,一条好狗狗能够救主人的性命,“看门狗”是cpu的“好朋友”,它也能够在cpu出状况的时候把它救活。
看门狗其实就是一个可以在一定时间内被复位的计数器,当看门狗启动后,计数器开始自动计数,经过一定时间,cpu就会将这个计数器复位,如果没有被复位,计数器溢出就会对CPU产生一个复位信 使系统重启,这个复位的操作就是“喂狗”。
看门狗就这样兢兢业业的守着它的主人cpu,当cpu出状况的时候,就不能喂狗了,看门狗饿了就知道cpu不正常工作了,然后发送复位信 让cpu重新醒过来。
对于一些安装在户外的设备,可以很直接的体现它的价值,比如运营商在荒郊野岭安装了好多基站,如果这里的基站停止工作了,就需要派人去这个基站手动重启了,有了看门狗以后,只要过一段时间没有喂狗,看门狗就将系统重启,节省了不少人力。
看门狗主要分三种:
1、内置在cpu内部的看门狗
此类看门狗一般是将一个芯片中的定时器来作为看门狗,通过程序的初始化,写入初值,并启动定时器。程序按时对定时器赋初值(或复位),以免它饿了。这种看门狗是可以被禁用的(只要停止这个定时器即可),好比对那只要咬你的狗来个“葵花点穴手”。大部分CPU都内置看门狗,硬件原理可参考各芯片数据手册。
优点:可以通过程序改变初始时间,也可以随时禁用
缺点:需要初始化,如果程序在初始化、启动完成前跑飞或在禁用后跑飞,看门狗就无法复位系统,这样看门狗的作用就没有了,系统恢复能力降低。
1.看门狗使用的输入时钟是PCLK,关于时钟的知识将在后面进行详细分析
2.看门狗的配置涉及到三个寄存器:控制寄存器(WTCON),数据寄存器(WTDAT),计数寄存器(WTCNT)
3.看门狗先将PCLK时钟进行预分频 (prescaler),分频的精度为0~255 (2的8次方-1 ,由WTCON的8-15位进行设置),预分频后再除以一个分频因子(division factor,由WTCON的4:3两位进行设置,一共有4中选择——16,32,64,128),有PCLK、prescaler和division factor三个变量以后,就可以计算出看门狗计数器递减时间间隔:
所以刚上电时,PCKL的大小12MHz,WTCON[15:8]设置为74,除数因子选择16,通过上面公式可以计算出,看门狗控制器递减时间间隔0.1毫秒。将WTCNT里的值设置为0x2710(十进制10000),那么看门狗会每过一秒钟产生一次超时。
我们来看看控制寄存器(WTCON),数据寄存器(WTDAT),计数寄存器(WTCNT)芯片手册:
为了看到看门狗的重启效果,我们加入了一个小程序,用来点亮led灯,将上述代码在linux下编译完后,烧写到NORFLASH里可以看到每过1秒钟,开发板的led灯就闪一下。
知识扩展
开启了看门狗之后,控制器会定时的复位,为了防止不停的复位,就要进行“喂狗”操作,喂狗操作相对比较简单,只要在WTCNT里的计数减为0之前,将其值重置一个非0的数值即可,看下面的函数:feed_dog(该代码仅供读者参考,光盘源码中没有给出具体例子)
喂狗程序对喂狗的时机必须要合适,否则在定时器还没来得及发生中断调用watchdog已经超时了,也将引起系统复位重启,通常系统里会开启另外一个时钟来为整个系统服务,它会定时的“告知”系统,在看门狗定时器超时之前,自动的调用喂狗程序。
总结
这篇文章讲了看门狗的一些内容,包括看门狗的作用,看门狗的分类,看门狗的工作原理和在arm处理器中看门狗的配置手册,并根据手册计算了看门狗的计时间隔和计时周期,最后用了一些例子演示了看门狗的操作过程。后面我们将继续根据uboot启动流程讲解中断相关的知识。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!