MSP430学习笔记-看门狗

2019-10-19来源: eefocus关键字:MSP430  看门狗  定时器

WDTCTL 看门狗控制寄存器

image.png

WDTCTL 由两部分组成: 
高 8 位是对 WDT 操作的控制命令。要写入操作 WDT 的控制命令,出于安全原因必须先正确写入高字节 
看门狗口令。口令位 5AH,如果口令写错将导致系统复位。 
读 WDTCTL 时,不需要口令,可直接读取地址 120H 中的内容,读出数据低字节位 WDTCTL 的值,高字 
节始终位 69H。WDTCTL 除了看门狗定时器的控制位之外,还有两个用于设置 NMI 引脚功能。 
WDTISx:选择看门狗定时器的计时输出 
其中 T 是 WDTCNT 的输入时钟源周期。 
0 T×2的15次方 
1 T×2的13次方 
2 T×2的9次方 
3 T×2的6次方 
WDTSSEL:选择 WDTCNT 的时钟源 
0 SMCLK 
1 ACLK 
由 WDTISx 及 WDTSSEL 位便可确定 WDT 定时时间,因此通过软件对计数器设置不同的初始值就可实现 
不同时间的定时。与其他定时器不同之处在于,WDT 最多只能定时 8 种和时钟源相关的时间。 
下表列出了 WDT 可选的定时时间(晶振为 32.768KHz,SMCLK=1MHz)。

image.png

WDTCNTCL:看门狗计数器清零位 
0: 无操作 
1: 将 WDTCTL 的值清零 
当该位为 1 时,清除 WDTCNT。 
WDTTMSEL:工作模式选择 
0 看门狗模式; 
1 定时器模式。 
WDTNMI:选择 RST/NMI 引脚功能(在 PUC 后被复位) 
0 RST/NMI 引脚为复位端; 
1 RST/NMI 引脚为边沿触发的非屏蔽中断输入。 
WDTNMIES:选择中断的边沿触发方式 


WDTHOLD:停止看门狗计数器 
0 WDT 功能激活 
1 时钟禁止输入,计数停止

WDTCNT 计数单元


image.png

WDTCNT 时 16 位增计数器,由于 MSP430 所选定的时钟电路产生的固定周期脉冲信号对计数器进行加 
法计数。如果计数器事先被预置的初始状态不同,那么从开始计数到计数溢出为止的时间就不同。 
WDTCNT 不能直接通过软件直接通过软件存取,必须通过看门狗定时器的控制寄存器 WDTCTL 来控制。

IE1 中断允许寄存器

image.png

WDTIE:看门狗定时器模式中断允许控制位 
0 看门狗定时器中断禁止 
1 看门狗定时器中断允许 
NMIIE:非屏蔽中断允许控制位 
0 禁止非屏蔽中断 
1 允许非屏蔽中断

IFG1 中断标志寄存器

image.png

WDTIFG:看门狗定时器模式中断标志 
0 无看门狗定时器中断标志 
1 有看门狗定时器中断标志 
NMIIFG:非屏蔽中断标志 
0 无非屏蔽中断标志 
1 有非屏蔽中断标志

看门狗定时器操作

用户可以通过 WDTCTL 寄存器中的 WDTTMSEL 和 WDTHOLD 控制位设置 WDT 工作在看门狗模式、定 
时器模式和低功耗模式。

看门狗模式

由于在上电复位或系统复位时,WDTCNT 和 WDTCL 两寄存器内容被全部清除(晶振为 32768Hz, 
SMCLK=1MHz): 
复位后,工作在看门狗模式,以 ACLK 为时钟,WDT 定时时间为 32ms。 
上述情况将导致 WDT 的运行自动进入看门狗模式。 
所以,用户软件一般都需要进行如下操作:

  • 进行 WDT 的初始化:设置合适的时间(通过 SSEL、IS0、IS1 位来选定)。

  • 周期性的对 WDTCNT 清零:防止 WDT 溢出,保证 WDT 的正确使用。

  • 在看门狗模式下,如果计数器超过了定时时间,就会产生复位和激活系统上电清除信号,系统从上电 复位的地址重启动。

  • 如果系统不用看门狗功能,应该在程序开始处禁止看门狗功能。

定时器模式 
WDTCTL 的 WDTTMSEL 位置位选择定时器模式。这一模式产生选定时间的周期性中断。定时时间 
可以通过 WDTCTL 的 WDTCNCTL 位置位来开始。

  • 改变定时时间而不同时清楚 WDTCNT 将导致不可预料的系统立即复位或中断。定时时间可以通过 WDTCTL 的 CNCTL 位置位来开始。

  • 如果先后分别进行清除和定时时间选择,则可能立即引起不可预料的系统复位或中断。

  • 另外,在终场工作时。改变时钟源可能导致 WDTCNT 额外的计数时钟。

低功耗模式 
当系统不需要 WDT 做看门狗和定时器时,可关闭 WDT 以减小功耗。 
控制位 WDTHOLD=1 时关闭 WDT,这时看门狗停止工作。

看门狗定时器头文件定义

在 msp430x14x.h 头文件中定义如下:

/************************************************************ 

* WATCHDOG TIMER 

************************************************************/ 

#define WDTCTL_ (0x0120) /* Watchdog Timer Control */

DEFW( WDTCTL , WDTCTL_) 

/* The bit names have been prefixed with "WDT" */ 

#define WDTIS0 (0x0001) 

#define WDTIS1 (0x0002) 

#define WDTSSEL (0x0004) 

#define WDTCNTCL (0x0008) 

#define WDTTMSEL (0x0010) 

#define WDTNMI (0x0020) 

#define WDTNMIES (0x0040) 

#define WDTHOLD (0x0080) 

#define WDTPW (0x5A00) 

/* WDT-interval times [1ms] coded with Bits 0-2 */ 

/* WDT is clocked by fMCLK (assumed 1MHz) */ 

#define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */ 

#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms " */

#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms " */

#define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */

/* WDT is clocked by fACLK (assumed 32KHz) */ 

#define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms " */

#define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */

#define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */

#define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)/* 1.9ms " */

/* Watchdog mode -> reset after expired time */ 

/* WDT is clocked by fMCLK (assumed 1MHz) */ 

#define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */

#define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) /* 8ms " */

#define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) /* 0.5ms " */

#define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */

/* WDT is clocked by fACLK (assumed 32KHz) */ 

#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms " */

#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */

#define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */

#define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */

所以我们使用 WDT 的时候可以直接写成下面的形式: 
做定时器用: 
WDTCTL = WDT_ADLY_1000; // 以 ACLK 延迟 1000ms 
WDTCTL = WDT_MDLY_32; // 以 SMCLK 延迟 32ms 
// 记得要开 IE1 中的 WDTIE 和_EINT(); 
做看门狗用: 
WDTCTL = WDT_ARST_1000; // 以 ACLK 设定 1000ms 的看门狗 
WDTCTL = WDT_MRST_32; // 以 SMCLK 设定 32ms 的看门狗 
// 由于在看门狗的定义里面包含 WDTCNCTL 
// 所以需要喂狗的时候只需要再写一边 WDTCTL = WDT_MRST_32; 就行了

关键字:MSP430  看门狗  定时器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477697.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:浅谈msp430f5529入门(1)——时钟模块DCO
下一篇:TI MSP430 如何使用 DCO 倍频

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
**第一步**先去官网下载芯片包在keil这个序列中选择TI公司相对应的芯片包下载后在pack installer->import->I agree ->finish出现绿色图标,就代表成功。第二步下载模板模板链接打开工程,选择正确的芯片出现下载失败或者没法编译时选择正确的编译器版本插好线接下来Debug的配置是选择正确的芯片flash然后点击编译下载就好了第三步下面两个网站可以下载资料开发板资料芯片资料从开发板原理图可以知道LED灯的引脚接下来是简单流水灯
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
MSP432E401Y-PWM的生成和占空比的调整
 * MSP432E4 Empty Project * * Description: An empty project that uses DriverLib * *                MSP432E401Y *             ------------------ *         /||          
发表于 2019-11-06
MSP432时钟系统CS
MSP432共有六个时钟源,五个时钟,下面分别由我来介绍一下时钟源分别有以下几个LFXTCLK:低频振荡器(LFXT),可与低频32768-Hz手表配套使用,晶体,标准晶体,谐振器,或外部时钟源在32千赫或以下的范围。当在旁路模式下,LFXTCLK可以由32 khz或以下的外部方波信号驱动的范围内。HFXTCLK:高频振荡器(HFXT),可与1-MHz至48-MHz范围内的标准晶体或谐振器一起使用。在旁路模式下,HFXTCLK可以通过外部方波信号驱动。DCOCLK:内部数字控制振荡器(DCO),默认频率为可编程频率和3 mhz频率。VLOCLK:内部极低功率低频振荡器(VLO),典型频率为9.4 khzREFOCLK:内部低功率
发表于 2019-11-06
MSP432E401Y单片机智能小车测速功能
 * MSP432E401Y * Description:本函数实现定时和测速功能   * 引脚:PD0->编码器输入信号 *         * Author: Robin.J***************************************************************************//* DriverLib Includes */#include <ti/devices/msp432e4/driverlib/driverlib.h>/* Standard
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
近来入手一块MSP432,折腾了一天,终于把官方demo程序导入IAR,可以愉快的写代码了,以下是我个人的解决办法。首先,如果要使用IAR对TI的单片机进行开发,首先要下载对应的单片机型号的MSPWARE,本人目前使用的是TI的MSP432P401R的launchpad,对应的MSPWARE的下载地址为msp432ware下载地址,下载完成后默认路径安装即可,安装完成后可以在安装路径下找到下图的文件IAR的下载安装在这里就不做赘述了,需要注意的是IAR的版本应该为IAR for ARM版本,这个千万不能搞错,否则可能会吃很多问题,不能正常运行。正确安装完IAR后应该是这个样子的,我现在安装的是最新的版本,测试没有问题准备工作完成
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved