【转载】DSP看门狗定时器

1 工作方式      

         在数字信号处理器的工作过程中有时会发生一些异常情况,这可能是在软件执行时发生错误,如堆栈溢出、内存溢出等软件编写时没有预料到的错误,也可能是DSP在运行时受到外界干扰而使得程序运行不正常,在这些情况下将会发生不可预测的错误。为了防止出现这种情况,使用看门狗定时器是一种很好的解决方法。

        看门狗定时器实际上是一个定时器,该定时器需要处理器周期性的执行一些特定操作,当处理器运行正常时,这些操作会正常执行,而当出现异常时这些操作将被打断,看门狗定时器计数会计到0而发生超时,这时定时器将输出一个低脉冲,这个输出可以触发中断或引起DSP复位(可以触发不可屏蔽中断或看门狗定时器中断,如果看门狗定时器的输出连接到硬件复位端将引起DSP复位)。

         看门狗定时器有一个16位计数器和一个16位预计数器,使得计数器动态范围达到32位。复位状态后,看门狗定时器是关闭的,且允许软件在将其使能之前,对其进行配置。看门狗定时器正常工作后,当定时器计到0时,会触发看门狗定时器中断,并将WDFLAG位置1,之后计数器和预计数器将会被重新载入,而超时事件将会从看门狗定时器的输出端输出。看门狗定时器正常工作时会在计数状态、服务状态和超时状态之间转换,接着给出了看门狗定时器的状态转换过程。

        如果看门狗定时器被使能,不能通过软件直接禁止,但可以通过看门狗超时事件或硬件复位禁止看门狗定时器。当软件陷入死循环或发生软件错误时,看门狗定时器会产生超时事件,强迫DSP进行异常处理。

       看门狗的时钟是直接来自时钟产生器,因此即使处理器处于休眠状态中仍将继续计数。

2 寄存器

          看门狗定时器主要有4个寄存器——即看门狗计数寄存器(WDTIM)、看门狗周期寄存器(WDPRD)、看门狗控制寄存器(WDTCR)和看门狗控制寄存器2(WDTCR2)。

        看门狗计数寄存器和看门狗周期寄存器都是16位寄存器,它们协同工作完成计数功能。

        看门狗周期寄存器WDPRD存放计数的初始值,当计数寄存器的值减到0后,将把周期寄存器中的数载入到计数寄存器中。当控制寄存器中的PSC位减到0之前或看门狗计数器被复位时,计数寄存器将进行减1计数。

3 配置看门狗定时器

   初始化和使能看门狗定时器的步骤:

   1.将主计数器周期PRD装入看门狗周期寄存器WDPRD

   2.设置看门狗定时器控制寄存器WDTCR的模式bit(WDOUT,SOFT和FREE),以及TDDR里的预定标控制值

   3.往看门狗定时器的控制寄存器2(WDTCR2)中的WDKEY写入关键值5C6H,使看门狗定时器进入预激活状态

   4.写关键值A7EH到WDKEY中,置位WDEN,将预定标模式bit(PREMD)的值写到WDTCR2中。这第二个值完成了关键值序列,表示一个实际的服务序列,WDEN = 1使能看门狗定时器,

3 看门狗定时器的应用

应用看门狗定时器的芯片支持函数首先要包含csl_wdtim.h头文件,接下来定义看门狗定时器的配置结构:

WDTIM_Config MyConfig = {

0x0060, /* Counter */

0x1000, /* Period */

0x0000, /* Control */

0x1000 /* Secondary control */

};

配置看门狗定时器需要调用看门狗配置函数:

WDTIM_config(&MyConfig);

在配置好看门狗定时器后调用开始函数,该函数的作用是将看门狗定时器控制寄存器2的WDEN位置成1:

WDTIM_start();

在运行看门狗开始函数后,看门狗开始递减计数,在计数器减到0之前需要周期性地向WDKEY字段写入A5C5h和A7Eh,否则看门狗定时器将会发生超时事件从而触发中断或复位,该操作可以通过调用WDTIM_service()函数来完成。

WDTIM_service();

时间: 2024-09-08 12:30:42

【转载】DSP看门狗定时器的相关文章

zigbee学习之看门狗定时器

看门狗的理解: 用的是独立的时钟源. void Init_Watchdog(void) //初始化看门狗 { WDCTL = 0x00;       //打开IDLE==0置看门狗 WDCTL |= 0x08;      //看起看门狗模式 WDCTL &= ~0x03;      //1s没有喂狗就发生复位 } void FeetDog(void) //喂狗 {      WDCTL = 0xa0;       //清除定时器.当0xA跟随0x5写到这些位,定时器被清除     WDCTL =

msp430-单片机MSP430f5529看门狗定时器

问题描述 单片机MSP430f5529看门狗定时器 MSP430f5529,用看门狗定时器使p3.7引脚相连的LED每秒点亮一次,灯亮的时间为定时的四分之一 解决方案 MSP430--看门狗定时器 解决方案二: 此处的定是是指你喂狗的周期吗? 你可以把喂狗的周期减少为原来的四分之一,同时做一个计数器,计数喂狗的次数,没当计数能被四整除就点亮灯,否则灭灯

绿色-看门狗问题请教,谢谢。第一次提问,不懂请教我

问题描述 看门狗问题请教,谢谢.第一次提问,不懂请教我 /******************************************************************************* 文件名称:WDTAsWD_Ex.c 功 能:CC253x系列片上系统基础实验--- 看门狗定时器作为看门狗 描 述:让看门狗定时器工作在看门狗模式,超时时间为0.25s(即到达0.25s之前还 没喂狗就产生复位).程序首先闪烁LED6(蓝色).LED5(绿色)和LED4(黄色) ,

Linux 软件看门狗 watchdog使用介绍_C 语言

背景: root@119.10.6.23:/usr/local/php# ps aux|grep watchdog root 6 0.0 0.0 0 0 ? S Aug28 4:50 [watchdog/0] root 10 0.0 0.0 0 0 ? S Aug28 4:11 [watchdog/1] root 14 0.0 0.0 0 0 ? S Aug28 3:58 [watchdog/2] root 18 0.0 0.0 0 0 ? S Aug28 3:36 [watchdog/3] 附

软件看门狗:别让你的程序没有响应

一.概述 一些重要的程序,必须让它一直跑着:而且还要时时关心它的状态--不能让它出现死锁现象.当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误.我们首要做的事是,把这个Bug揪出来.但如果时间紧迫,这个Bug又"飘忽不定",那么,我们还是先写一个软件"看门狗",暂时应一下急吧. "看门狗"的需求描述:"看门狗"的运行不出现界面窗口,具有一定的隐蔽性:定时判断目标进程是否运行在当前系统中,如果没有则启动目标进程:判断目

ntpdate watchdog-应用程序调用系统命令ntpdate,导致看门狗重启

问题描述 应用程序调用系统命令ntpdate,导致看门狗重启 命令如下: ntpdate -p 1 ntp.sjtu.edu.cn 看门狗超时时间是1.5s,每次调用NTP同步,就会触发看门狗重启.求助!!

linux内核-关于Linux内核看门狗的疑问

问题描述 关于Linux内核看门狗的疑问 在内核源码中,Linux内核看门狗线程的调度策略是SCHED_FIFO,而我自己的内核模块中调度策略默认为SCHED_NORMAL,按理说FIFO比NORMAL的优先级要高,可为什么我自己模块中的死循环还是让看门狗饿死了,求解释.

嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

Uboot_Kernerl_Add_Watch_Dog:   U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash controller v350... FoundSpi(cs1) ID: 0xEF 0x40 0x18 0x00 0x00 0x00Spi(cs1): Block:64KB Chip:16MB Name:"W25Q128B"*** Warning - bad CRC, using def

arm8裸机开发看门狗问题

问题描述 arm8裸机开发看门狗问题 程序代码如下#include ""s5pc100.h"" typedef struct { unsigned int WTCON; unsigned int WTDAT; unsigned int WTCNT; unsigned int WTCLRINT; }watchdog;#define WATCHDOG (*(volatile watchdog *)0XEA200000) void watchdog_unit(){ pri