您的位置 首页 新品

MSP430F5529 (二)看门狗的设置

看门狗定时器(WatchdogTimer(WDT_A))实际上是一个特殊的定时器,即可以用来作为看门狗使用,也可以用作定时器。所谓的看门狗功能,是指

看门狗守时器(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。

WDTHOLD:Bit7,WDT HOLD,
0:翻开看门狗计时器;
1:封闭

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

WDTTMSEL:Bit4,作业形式挑选
0:看门狗形式;
1:守时器形式;
WDTCNTCL:Bit3,计时器清零
0:无效;
1:清空计数器,即WDTCNT=0x0000h
WDTIS: Bits2-0,WDT Interval Select,距离时刻挑选。用来挑选计数的周期,共有8种时刻能够挑选。

补白:括号前数字为计数器的值

2.2.2 看门狗计数值寄存器WDTCNT(Watchdog 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;

/*喂狗,即对有用状况的看门狗进行清零操作*/
/*时刻计满还不喂狗就会导致程序重启*/
/*WDTIS2即WDTIS=100,此刻时刻距离设为1S,假定频率为32.768KHZ*/
WDTCTL = WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2;

/*将看门狗设置为计数器形式,计数8192约250ms,假定频率为32.768KHZ*/
/* WDTIS2+WDTIS0即101*/
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
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/256153.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部