实验八 看门狗实验

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八看门狗实验

一、实验目的

1、了解看门狗的作用;

2、掌握看门狗的使用方法。

二、实验内容

1、编程实现看门狗功能,观察看门狗作用;

2、编程实现看门狗喂狗。

三、实验设备

1、硬件:

JX44B0实验板;

PC机;

JTAG仿真器;

2、软件:

PC机操作系统(WINDOWS 2000);

ARM Developer Suite v1.2;

Multi-ICE V2.2.5(Build1319);

四、基础知识

1、用ADS集成开发环境,编写和调试程序的基本过程;

2、应用程序的框架结构。

五、实验说明

1、看门狗的功能和工作原理

嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗电路。看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。

其基本原理为:当本系统程序完整运行一周期的时间为Tp,看门狗的定时周期时Ti,Ti>Tp,在程序运行一周期后,就修改定时器的计数值,(俗称“喂狗”),只要程序正常运行,定时器就不会溢出,若由于干扰等原因使系统不能在Tp时刻修改定时器的计数值,定时器将在Ti时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控作用。

在一个完整的嵌入式机系统或单片机最小系统中通常都有看门狗定时器。而且一般集成在处理芯片中,看门狗实际上就是一个定时器,只是它在期满后将自动引起系统复位。

2、S3C44B0看门狗的控制

S3C44B0的看门狗定时器有两个功能:

1)为常规定时器使用,而且可以引发中断;

2)为看门狗定时器使用,期满时,它可以产生128个时钟周期的复位信号。

下图是S3C44B0看门狗的示意图。输入时钟为MCLK(该时钟频率等于系统的主频),它经过两级分频,最后将分频后的时钟作为该定时器的输入时钟,当计数器期满后可以产生中断或者复位信号。

S3C44B0看门狗电路示意图

看门狗定时器计数值的计算公式如下:

t_watchdog = 1 / (PCLK / (Prescaler value + 1 ) / Division_factor)

看门狗的定时周期:

T = WTCNT * t_watchdog

看门狗定时器相关寄存器如下:

控制寄存器(WTCON)

通过该寄存器,可以使能/禁止看门狗、选择输入时钟源、使能/关闭中断、使能/关闭输出。该寄存器的地址以及各控制位的定义如下:

控制寄存器

数据寄存器(WTDAT)

该数据寄存器用于设置看门狗定时器的超时值。在初始的操作中该值不会自动加载到定时器中,首次定时器超时值位期初始值0X8000,以后该寄存器的值会被自动加载到WTCNT 寄存器中。一般时该定时器工作在通用定时器模式下时使用。

数据寄存器

计数器寄存器(WTCNT)

看门狗的定时器的计数器,它的值表示该寄存器的当前计数值,即到下一次期满还需要经历的时钟数,当该定时器工作在看门狗模式时使用该寄存器,每次期满前需要重新设置其值,以防止发生复位。

计数器寄存器

3、程序解析

1)使能WATCHDOG的代码

rWATCNT = 0X1000; /* 设置看门狗初始值 */

rWATCON = BIT_WDT_ENABLE | BIT_WDT_RST_ENABLE | BIT_WDT_CLK_SEL |

BIT_WDT_PRE_SCALER; /* 打开看门狗 */

其中WDT_CLK_SEL和WDT_PRE_SCALER的值如下:

#define WDT_CLK_SEL (0X3 <<3) /* 1/128 */

#define WDT_PRE_SCALER (0XFF <<8) /* 255 */

2)看门狗定时器的时钟周期为(工作主频为60MHZ)

t_watchdog = 1/( MCLK / (255 + 1) / 128 );

3)将WDTCNT设置为0x1000,其超时时间为

t = 0x1000/( 60M / (255 + 1) / 128 ) ≈ 2 秒

4)喂狗

使用程序定期的设置WTCNT寄存器,俗称“喂狗”,继续修改上一次实验的程序,在TICK中断中每秒重置一次WDTCNT的值(使用同一个值0X1000),检查是否有复位发生

if(tick_index%1==0)

rWATCNT = 0X1000; /* 重新设置看门狗时间值 */

5)在TICK中断中每3秒重置一次WDTCNT的值(使用同一个值0X1000),检查是否有

复位发生

if(tick_index%3==0)

rWATCNT = 0X1000; /* 重新设置看门狗时间值 */

六、实验步骤

1、仔细阅读实验说明部分,熟悉WATCHDOG的原理;

2、直接用ADS打开已有的工程文件,或者按照实验一中的方法重新建立工程(当函数无法通过右键跳转的时候,就必须重新建立工程,把所需文件放在一个文件夹下)

3、在DebugRel目录下编译源文件。(详见实验一),分析并熟悉程序。.

4、调试运行程序观察程序运行。自行修改程序观察各变量、寄存器等的作用。

相关文档
最新文档