MSP430学习小结1--看门狗的使用总结

发布者:风清扬yx最新更新时间:2021-05-27 来源: eefocus关键字:MSP430  看门狗  定时器 手机看文章 扫描二维码
随时随地手机看文章

看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。在很多单片机中都内置了看门狗,看门狗本身是一个定时器,当定时器溢出时即进行系统复位,因此需要在程序中对看门狗定时器进行清零,即常说的喂狗。


由于我用过AVR的单片机,和AVR的相比,MSP430的看门狗要灵活的多,首先默认看门狗是开着的,因此如果不使用看门狗的话要关闭,指令如下:


WDTCTL = WDTPW + WDTHOLD

如果打开看门狗则需要在程序中清零,指令如下:

WDTCTL=WDTPW+WDTCNTCL

这只是基本的应用,430的看门狗要稍微复杂一些,首先从IAR的头文件中看看定义了几种工作状态:


view plaincopy to clipboardprint?

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

/* WDT is clocked by fSMCLK (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 fSMCLK (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-interval times [1ms] coded with Bits 0-2 */

/* WDT is clocked by fSMCLK (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 fSMCLK (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 " */

从头文件的定义中可以看出主要有两种方式,一种就是当做普通的定时器使用,一种才是作为看门狗,另外就是时钟源可选,选择8M或者32K的晶振来获得不同的延时,通过上面可以看出看门狗定时器最大的时间可以到1S,在程序中可以灵活的利用看门狗定时器实现想要的功能。

下面介绍两个典型应用:


1、在动态数码管显示中的应用,具体代码可以参考我之前的笔记,部分代码如下:

WDTCTL = WDT_ADLY_1_9; // 设置内部看门狗工作在定时器模式,1.9ms中断一次

//可以去看头文件中具体的配置,这里使用的手表晶振64分频计算可得是1.9ms

IE1 |= WDTIE; // 使能看门狗中断

__interrupt void watchdog_timer(void)


{

}

这个程序主要是将看门狗定时器当做普通定时器使用,1.9ms刚好适合动态扫描间隔,在看门狗中断中对数码管进行动态扫描,这样使用相对于开一个定时器来说要有所方便。因此在需要的定时与看门狗定时器的几个时间相同时可以考虑使用看门狗。

2、普通延时

WDTCTL = WDT_ADLY_1000; //间隔定时器,定时1000ms

//延时2s

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

{

IFG1 &= ~WDTIFG;


while(!(IFG1 & WDTIFG));

IFG1 &= ~WDTIFG;

}


这个程序同样是将看门狗当普通定时器使用,在主程序中读取中断标志位,实现延时效果,上面的程序为什么是延时2S自己分析。


这里面举了两个例子,是最近学习的一点小体会,当然还是不能忘了看门狗的本能工作,在程序较为简单时可以考虑使用看门狗定时器简化设计。另外还有一点觉得比较重要的是虽然头文件中对寄存器都有了很好的定义,但是还是很有必要对着头文件和寄存器把主要的寄存器看一面,弄清每一种工作模式的使用方式和注意点。

关键字:MSP430  看门狗  定时器 引用地址:MSP430学习小结1--看门狗的使用总结

上一篇:单片机调EEPROM存储器24C256
下一篇:基于MSP430单片机的婴儿睡眠监护系统

推荐阅读最新更新时间:2024-11-17 13:02

MSP430学习笔记-IO端口
端口控制寄存器 PxDIR 输入/输出方向寄存器 PxIN 输入寄存器 PxOUT 输出寄存器 PxSEL 引脚功能选择寄存器 PxIFG 中断标志寄存器 PxIE 中断允许寄存器 PxIES 中断触发沿控制寄存器 1 5、6、7为P1、P2特有
[单片机]
MSP430看门狗定时器
2.WDT interrupt: 看门狗有两种工作模式,watchdog mode, interval mode。 WDTIFG 置位的两种情况:在看门狗模式下发生看门狗溢出。在间隔定时模式下发生定时溢出,且全局中断使能GIE和WDTIE均开启。 WDTIFG在中断服务程序后会自动清除该标记。 3.WDTCTL WDTPW:必须写0x5A. WDTHOLD:停止看门狗就设为1. WDTNMIES: NMI下降沿为1,上升沿为0. WDTNMI: NMI为1. WDTTMSEL:间隔定时器模式设为1. WDTCNTCL:通过该位来清除WDT计数器的值 通常设为1表示清除到0. WDTSSEL:
[单片机]
<font color='red'>MSP430</font><font color='red'>看门狗</font><font color='red'>定时器</font>
mini2440硬件篇之PWM定时器
1. 硬件原理 2440有5个16位定时器,其中0、1、2、3有PWM功能,有一根输出引脚,可以产生周期性高低电平变化。定时器4没有输出引脚。 2. 芯片手册 3. mini2440电路图 4. S3C2440寄存器 定时器时钟源是PCLK,先通过2个预分频器TCFG0 TCFG1降低频率,降频后就确定了定时器工作频率。初始设定值TCMPBn(用于比较反转输出电平)、TCNTBn。TCON控制定时器启动。TCMPBn的值装入TCMPn,TCNTBn的值装入TCNTn,每个定时器周期,TCNTn减1,可以通过TCNTOn读取计数值。当和TCMPn相等时,反转电平输出。减到0时,再次反转,如果TCON设置自动加载,则重复如上步骤。
[单片机]
mini2440硬件篇之PWM<font color='red'>定时器</font>
stm32cube通用定时器输入捕获
用定时器输入捕获做红外线接收实验。(此次试验以通道2为例) ①stm32cube配置 ② ③ ④程序中主要用到的输入捕获相关寄存器 uint16_t tim_sr,tim_ccer,tim_ccr; tim_sr=htim- Instance- SR;//状态寄存器 tim_ccer=htim- Instance- CCER;//捕获、比较使能寄存器 tim_ccr=htim- Instance- CCR2;//捕获比较寄存器2(即用来保存通道2发生中断时的CNT寄存器的值) htim- Instance- CNT //计数寄存器 SR用来判断是不是输入捕获中断; CCER寄存器用来判断当前是下降
[单片机]
用51单片机定时器中断设计电子钟
把前天设计的时钟的功能补全了一些,贴上来, #include reg52.h #define uchar unsigned char sbit rd=P2^6; sbit wr=P2^5; sbit lcde=P2^7; sbit k1=P1^0; sbit k2=P1^1; sbit k4=P1^3; sbit k8=P1^7; uchar code table1 = 2011-11-05 ; uchar code table2 = 00:00:00 ; uchar code table3 ={{ MON },{ TUE },{ WED },{ THU },{ FRI },{ SAT },{ SUN }};
[单片机]
基于MSP430的三线串行接口通信系统
摘要:通过研究三线串行接口的构成原理, 设计了一种基于MSP430 单片机和FPGA 的三线串行接口测试仪。该测试仪利用MSP430 单片机来控制三线传输功能,由FPGA 产生三线传输时序,由相应的上位机软件来测试数据通信。经测试,该测试仪具有使用方便、功能齐全、性能稳定等特点, 能够较好应用于航天领域的三线串行接口通信测试中。 三线串行接口是一种广泛应用在航天工程领域的简单串行通信接口, 是航天单机产品遥测遥控通信链路的重要环节。三线串行接口具有电路简单、时序便于实现、波特率可调等诸多优点。 传统三线串行接口的设计一般是采用数字电路搭接而成, 虽然能满足工程设计要求, 但是体积较大, 耗费资源过多, 而且灵活性欠佳。为了
[单片机]
基于<font color='red'>MSP430</font>的三线串行接口通信系统
基于MSP430单片机的开关稳压电源设计
  1 引 言   MSP430系列单片机是美国TI公司生产的新一代16位单片机,是一种超低功耗的混合信号处理器(MixedSignal Processor),它具有低电压、超低功耗、强大的处理能力、系统工作稳定、丰富的片内外设、方便开发等优点,具有很高的性价比,在工程控制等领域有着极其广泛的应用范围。开关Boost稳压电源利用开关器件控制、无源磁性元件及电容元件的能量存储特性,从输入电压源获取分离的能量,暂时把能量以磁场的形式存储在电感器中,或以电场的形式存储在电容器中,然后将能量转换到负载。对DC-DC主回路采用Boost升压斩波电路。   2 系统结构和总设计方案   本开关稳压电源是以MSP430F449为主控制器件,
[单片机]
基于<font color='red'>MSP430</font>单片机的开关稳压电源设计
基于GD32驱动BLDC电机(1)定时器和PWM
心血来潮买了几个BLDC电机,准备这次就使用苹果派这块板子试一下BLDC电机的控制。 苹果派这块板子的书籍和例程很多,要驱动电机首先要配置定时器,产生可控的PWM脉冲。 趁快递还没到,先学习一下PWM的生成方式: 按照例程和书籍配置寄存器TIMER2: static void ConfigTimer2(unsigned short arr, unsigned short psc) { timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数 //使能RCU相关时钟 rcu_periph_clock_enable(R
[单片机]
基于GD32驱动BLDC电机(1)<font color='red'>定时器</font>和PWM
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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