历史上的今天
今天是:2025年02月21日(星期五)
2020年02月21日 | msp430 看门狗设置
2020-02-21 来源:eefocus
看门狗定时器(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 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 }
史海拾趣
|
在S3c2410下,已经可以识别U盘,如何才能实现U盘热插拔是U盘文件系统自动挂载在 /mnt/media/目录下,这个问题困绕我几天了,希望可以快点解决。… 查看全部问答> |
|
请问我在我制订的CE系统中装了个软件(ICA CLIENT)为什么一掉电就没了?? 怎么能永久保存呢?? 我是先加的IDE驱动 在CE系统下能看到硬盘的每个盘符 这样我把那个软件安装放在一个盘符下 然后进CE系统安装,但是每次重启就得重新安装 … 查看全部问答> |
|
In-Stat指出,当Google TV发布了未来的网络和电视的结合体的雏形洋洋得意之时,主流的广播电视网络似乎心存异议,并且某些早期的使用者也指出这款软件的中存在瑕疵。 首席分析师Gerry Kaufhold说,Sony提供由Google TV提供技术支持的高清电视 ...… 查看全部问答> |
|
80C51系列单片机及其衍生产品在我国乃至全世界范围获得了非常广泛的应用。单片机领域的大部分工作人员都熟悉80C51单片机,各大专院校都采用80C51系列单片机作为教学模型。随着单片机的不断发展,市场上出现了很多高速、高性能的新型单片机,基于标 ...… 查看全部问答> |
|
目录关于本文档...................................................................................................................................... 18读者........................................................................... ...… 查看全部问答> |




