微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TQ2440国嵌学院gboot-关闭看门狗

TQ2440国嵌学院gboot-关闭看门狗

时间:11-26 来源:互联网 点击:
本次将重点学习看门狗的设定,watchdog

1、很多人不理解看门狗,也不知道其含义,那么究竟什么是看门狗呢?

看门狗,又叫 watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
看门狗工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗

看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。

看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。

简单来说,看门狗就是一种监视的机制,对异常做出判断。

2、TQ2440看门狗

在S3C2440规格书中有一节专门介绍看门狗的,也就是WATCHDOG TIMER,介绍如下:

OVERVIEW
The S3C2440A watchdog timer is used to resume the controller operation whenever it is disturbed by malfunctions,such as noise and system errors.It can be used as a normal 16-bit interval timer to request interrupt service.The watchdog timer generates the reset signal for 128 PCLK cycles.
FEATURES
— Normal interval timer mode with interrupt request
— Internal reset signal is activated for 128 PCLK cycles when the timer count value reaches 0 (time-out).

从上面一段可以看出看门狗使用的时钟信号时PCLK的信号源,当然好奇的同学肯定会问PCLK是什么,PCLK具体是什么将会在系统时钟介绍,简单的来PCLK是系统时钟12MHZ(也有可能是24MHZ)的系统经过锁相环得到的,PCLK的频率是系统时钟的整数倍,后面会介绍。

2、看门狗的工作机制



这张图也是从规格书中找到的,可以看到PCLK经过WTCON控制寄存器设定后,然后进入MUX,然后是WTDAT,最近到WTCNT数据寄存器,也就是说在看门狗工作的时候,看门狗的会通过计数,将计数的值与数据寄存器的值进行比对,溢出的话,就有产生中断,也就是reset重启,因此在打开看门狗之前,一定要初始化看门狗的数据寄存器WTDAT,这个原理规格书也有介绍到,如下

WTDAT & WTCNT
Once the watchdog timer is enabled, the value of watchdog timer data (WTDAT) register cannot be automatically reloaded into the timer counter (WTCNT).In this reason, an initial value must be written to the watchdog timer count (WTCNT) register, before the watchdog timer starts.

3、关闭看门狗

到了真正关闭看门狗的时候,怎么样能够关闭看门狗呢,当然通过看门狗的控制寄存器WTCON,继续看下文



这里我们主要介绍看门狗控制寄存器WTCON,其他两个寄存器暂时不介绍,用的时候再和大家分享。

首先看到WTCON寄存器的地址0x53000000,其次是表格最后一行Reset enable/disable=WTCON[0]也就是WTCON的最后一位是控制看门狗的打开或者关闭,1:打开;0:关闭。

下面就是关闭看门狗的代码:

#define pWTCON 0x53000000//宏定义pWTON:0x53000000,看着很熟悉,对的,这是看门狗WTCON的地址
disable_watchdog://子程序入口函数

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

网站地图

Top