(4)MSP430F5529 看门狗的设置

  看门狗定时器(Watchdog Timer(WDT_A))实际上是一个特殊的定时器,即可以用来作为看门狗使用,也可以用作定时器

  所谓的看门狗功能,是指可以监控程序是否由于某些干扰或者错误而跑飞。其原理就是发生故障的时间满足规定的定时时间后,产生一个非屏蔽中断,使系统复位。这样当在调试程序或预计程序在某个地方可能瞬时发生错误时(如外部电路干扰),选用设置看门狗定时中断可以避免程序跑飞。

  当然,它也可以用作一般的定时功能

  不过实际上,由于看门狗定时器(作看门狗使用时)需要很严密的设置(否则程序容易经常重启),所以很多人都不会使用这项功能。所以,程序一开始就加上一句话:WDTCTL=WDTPW+WDTHOLD来关闭看门狗。

2.1  WDT_A的简介

              特点:

              8种可选定时时间

    ②看门狗模式

    ③定时器模式

    ④看门狗控制寄存器存在密码保护

    ⑤时钟源可选,且具有时钟源意外保护

    ⑥可以被终止来节省能源

    ⑦无论是用作看门狗还是定时器,其间隔时间都无法随意设定,只能从8种设定中选择,当然可以通过更改时钟频率来间接更改时间;

  注意默认设置:程序启动,看门狗即启动;监控周期为32ms/32.768KHZ(也就是说当看门狗的时钟频率为32.768KHZ时,每过32ms,如果不软件清空,程序就会重启);所用的时钟源为SMCLK(实际频率不是32.768KHZ,后面会提到)。

2.2  WDT_A的寄存器及操作

           注意:所有的寄存器都存字操作和字节操作模式。例如对WDTCTL寄存器直接赋值是字操作,你也可以通过WDTCTL_L(低字节寄存器)、WDTCTL_H来进行字节操作赋值。

           该类寄存器只能赋值不要进行“|=&=”等逻辑操作。

           2.2.1看门狗控制寄存器WDTCTL(Watchdog Timer Control

          该寄存器是一个16位带有密码保护的读写寄存器。所谓的密码保护,是为了防止该寄存器被不小心篡改。那么是如何实现密码保护呢?事实上,该寄存器的高字节用来存放口令,低字节才是控制数据写口令为05Ah,读口令为069h,任何和口令不一样的高字节操作都会导致系统复位。

该寄存器的位功能定义如下:(支持位操作)

WDTPW:Bits15-8,WDT Password,写为05Ah,读为069h。

              WDTHOLDBit7,WDT HOLD,

   0:打开看门狗计时器;

                                   1:关闭

WDTSSEL:Bits6-5,WDT Clock Source Select时钟源选择

      WDTTMSELBit4,工作模式选择

         0:看门狗模式;

                                     1:定时器模式;

   WDTCNTCL:Bit3,计时器清零

        0:无效;

                                    1:清空计数器,即WDTCNT=0x0000h

      WDTIS:  Bits2-0,WDT Interval Select,间隔时间选择。用来选择计数的周期,共有8种时间可以选择

备注:括号前数字为计数器的值

2.2.2 看门狗计数值寄存器WDTCNTWatchdog Timer Counter

这是一个32Bit的加计数器,但是不能通过软件来直接对其进行赋值等操作,只能通过WDTCTL中的WDTIS来选择时间。或者你可以通过WDTSSEL选择不同的时钟源,来间接改变时间。

2.2.3  看门狗中断 位控制

                   WDT利用SFRS总寄存器中的两位来控制中断。

                   WDT中断标志位:WDTIFG,位于SFRIFG1.0

                   WDT 中断使能位:WDTIE,位于SFRIE1.0

看门狗模式:如果不及时对WDTCNT清零或者对WDT初始化,WDTIFG就会置位,然后程序就会重启

                   计时器模式:必须开总中断GIE和看门狗中断WDTIE。此外,当执行完中断服务程序后,标志位WDTIFG会自动清零

2.3常用操作

                   /*关闭看门狗*/

                   WDTCTL=WDTPW+WDTHOLD

                   /*喂狗,即对有效状态的看门狗进行清零操作*/

                   /* 时间计满还不喂狗就会导致程序重启*/

                   /*WDTIS2WDTIS=100,此时时间间隔设为1S,假定频率为32.768KHZ*/

                   WDTCTL = WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2

                   /*将看门狗设置为计数器模式,计数8192250ms,假定频率为32.768KHZ*/

                   /* WDTIS2+WDTIS0101*/

                   WDTCTL=WDTPW+WDTCNTCL+WDTTMSEL+WDTIS2+WDTIS0

总结例程:

/*首先将WDT设为定时器功能。而中断服务子程序则是把WDT改为看门狗功能。这样就通过中断控制的周期性的重启程序,实现了LED闪烁*/

/*注意,这里默认的时钟源不是32KHZ,而是内部的DCO-SMCLK(之后会讲到)1.045MHZ所以前面WDTIS定义的时间大约都要缩小1045/32=32倍*/

#include <msp430.h>

void main(void)

{

/*清零-设定为计数器-时间设定为010模式,即256S/32=8S*/

WDTCTL=WDTPW+WDTCNTCL+WDTTMSEL+WDTIS1;

__enable_interrupt();   //开总中断

SFRIE1|=WDTIE;          //开看门狗定时器中断

P1DIR=0xff;

int i,j;

P1OUT=0xff;

for(i=0;i<30000;i++)

for(j=0;j<50;j++);    //延时约8S

P1OUT=0x00;

while(1);

}

/*中断服务程序*/

#pragma vector=WDT_VECTOR

__interrupt void WatchTimer(void)

{

WDTCTL=WDTPW+WDTCNTCL+WDTIS1;  //看门狗模式,时间设定约为8S

}

文章摘录于http://blog.lehu.shu.edu.cn/879836630/A449023.html

时间: 2024-10-29 19:08:45

(4)MSP430F5529 看门狗的设置的相关文章

[ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG

引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数.如果看门狗减到0就认为程序没有正常工作,强制整个系统复位.因此可以用看门狗防止程序在跑飞的时候回不到正常模式. 看门狗可用于受到电气噪音.

STM32的两只看门狗

STM32独立看门狗, 由专门的低速时钟(LSI)驱动,即便是主时钟发生故障它仍能够有效,所以此狗狗可以工作在与主时钟无关的要求下,或者待机模块下等,所以它叫独立看门狗,注意一旦开启此看门狗则只能由MCU复位后才清除,让它不再工作. 它的时钟是一个内部RC时钟,它会在30KHZ到60KHZ之间变化,并非是精确的40KHZ,而只是一般计算时取40KHZ. 独立看门狗需设置四个寄存器如下: 其中, 预分频寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可设

看门狗驱动程序

看门狗是当CPU进入错误状态后,无法恢复的情况下,使计算机重新启动 由于计算机在工作时不可避免的受到各种各样的因素干扰,即使再优秀的计算机程序也可能因为这种干扰使计算机进入一个死循环,更严重的就是导致死机. 有两种办法来处理这种情况: 一是:采用人工复位的方法 二是:依赖于某种硬件来执行这个复位工作.这种硬件通常叫做看门狗(Watch Dog,WD) 看门狗,就像一只狗一样,在那看着们,计算机中通常用定时器来处理这种周期性的动作 看门狗实际上是一个定时器,其硬件内部维护了一个定时器,每当时钟信号

[看门狗]内部看门狗和外部看门狗

1. 芯片内部看门狗 内部看门狗通常为芯片内部某个特殊定时器,用户可以通过手动初始化.设置timeout.使能.失能该看门狗,然后在线程中定时去喂狗,从而达到检测应用程序跑飞.跑死的情况. 在Linux系统中,可以在uboot中打开看么狗,把喂狗时间设置长度超过kernel启动时间,从而当kernel正常启动后,喂狗任务由uboot交给了应用程序,这样达到了监控kernel启动bootsup和应用程序的双重功效. 2. 芯片外部看门狗 外部看门狗具有独立性,可以更加安全的确保芯片的正常运行. 外

5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1

CC2541蓝牙学习——看门狗

看门狗是在软件跑飞的情况下CPU自恢复的一个方式,看门狗分为硬狗和软狗,硬狗就是由专门的看门狗硬件电路实现看门狗功能,看门狗芯片也比较多,比如DS1232,除了看门狗功能外还有电源电压监测功能.软狗就是由软件实现的看门狗功能,现在很多CPU都自带了软狗,很难说硬狗好还是软狗好,如果软狗够用,尽量使用软狗简化设计,看门狗说白了就是一个定时器!,当软件在选定的时间间隔内不能置位看门狗定时器(WDT),WDT就复位系统.看门狗可用于电噪声,电源故障或静电放电等恶劣工作环境或高可靠性要求的环境.如果系统

u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗

u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文档: Arm9内核手册:http://download.csdn.net/detail/wrjvszq/8358867 Arm11内核手册:http://download.csdn.net/detail/wrjvszq/8358877 Arm a8内核手册:http://download.csdn.

一个软件实现的Linux看门狗—soft_wdt

soft_wdt(下面简称本软件)是一个软件实现的Linux看门狗. 本软件是一款开源.免费软件. 下载地址: https://github.com/sunmingbao/soft-wdt/archive/master.zip 本软件和/drivers/watchdog/softdog.c实现的软件看门狗差点儿一样. 基本的不同点是,前者支持一个看门狗.本软件则支持大量的看门狗. soft_wdt代码编译后.生成一个内核模块soft_wdt.ko. 模块载入后,将创建一个设备文件/dev/sof

STM8 配置看门狗的坑

首先祭出正确的打开方式.. void IWDG_Init(void) //配置并启动看门狗 { IWDG->KR = 0xcc;//启动独立看门狗 IWDG->KR = 0x55;//写入解锁 IWDG->PR = 0x06;//256分频 IWDG->RLR = 0xff;//设置重载寄存器 IWDG->KR = 0xaa;//锁定并刷新 } void IWDG_Feed(void)//喂狗 { IWDG->KR = 0xaa; }