历史上的今天
返回首页

历史上的今天

今天是:2025年03月04日(星期二)

正在发生

2020年03月04日 | msp430的看门狗总结

2020-03-04 来源:eefocus

1、首先知道看门狗有三种工作方式:

①不工作

②当中断计数器

③看门狗


2、熟悉和看门狗的三个寄存器:

在这里插入图片描述

看门狗控制,对应的中断使能和中断标志。


看门狗控制

在这里插入图片描述

中断使能:

在这里插入图片描述

中断标志:

在这里插入图片描述

注:寄存器的每个位的说明不做解释,可以网上查找


3、熟悉寄存器之后,分别讲下三种状态怎么设置:

①不工作模式

就是关闭看门狗,因为看门狗时默认打开状态的,所以,如果不想用这个功能必须要先设置一下:

先写出需要控制的寄存器:WDTCTL;把需要需要改变的值赋值到这个寄存器中,这里因为寄存器的每个位在头文件之中都有自己明确的定义(define),所以可以简写成以下模式:

WDTCTL = WDTPW + WDTHOLD;

这里简单说下为啥这么写:

#define WDTPW (0x5A00u);,是看门狗的写入指令,必须有这个指令才能改变看门狗的控制位;

#define WDTHOLD (0x0080u);是看门狗的使能位,缺省是0为打开开门狗,置位则变成关闭看门狗;

下面的控制位也是这样可以查到响应的意思。


②定时计数模式:


定时计数模式分为八种计数模式:

/* 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 " */


这里写个简单的例子来说明:

我的电路上P2.0连接的是一个发光二极管,我这里用看门狗的计数器来控制发光二极管的亮灭;


#include "msp430x14x.h"


int main( void )

{

  WDTCTL = WDT_ADLY_1000; //使用了32768hz来控制计数,这里间隔是1S

  

  IE1 |= WDTIE;                             // Enable WDT interrupt

  P2DIR = 0x01;                            // Set P2.0 to output direction

  

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM0 w/ interrupt


}

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)

{

  P2OUT ^= BIT0;                            // Toggle P2.0 using exclusive-OR

}


所以每隔1S启动看门狗的中断函数,执行看门狗中断函数;


③作为看门狗模式:


看门狗模式分为八种计数模式:

/* 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 " */


给个简单的例子,来对比之前的是方式:


#include "msp430x14x.h"



int main( void )

{

  WDTCTL = WDT_ARST_1000;

  IE1 |= WDTIE;                             // Enable WDT interrupt

  

  P2DIR = 0x01;                            // Set P2.0 to output direction

  P2OUT ^= BIT0;

  

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM0 w/ interrupt


}


这里不用单独写中断函数,因为技术超出之后,只要ifg置位,则单片机软复位。

上面两个例子的实验结果相同,但是实现方式不同,注意看WDTCTL后面的赋值语句,两种赋值语句是不同的。


三种模式讲完了,下面讲下官方给的案例:


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

//  MSP-FET430P140 Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK

//

//  Description: Toggle P1.0 using software timed by the WDT ISR. Toggle rate

//  is approximately 30ms based on default ~ 800khz DCO/SMCLK clock source

//  used in this example for the WDT.

//  ACLK= n/a, MCLK= SMCLK= default DCO~ 800k

//

//   MSP430F149

//             -----------------

//         /||              XIN|-

//          | |                 |

//          --|RST          XOUT|-

//            |                 |

//            |             P1.0|-->LED

//

//  M. Buccini

//  Texas Instruments Inc.

//  Feb 2005

//  Built with IAR Embedded Workbench Version: 3.21A

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


#include 


void main(void)

{

  WDTCTL = WDT_MDLY_32;                     // Set Watchdog Timer interval to ~30ms

  IE1 |= WDTIE;                             // Enable WDT interrupt

  P1DIR |= 0x01;                            // Set P1.0 to output direction


  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

}


// Watchdog Timer interrupt service routine

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)

{

  P1OUT ^= 0x01;                            // Toggle P1.0 using exclusive-OR

}


上面的例子和我的写的例子基本一个意思;


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

//  MSP-FET430P140 Demo - WDT, Toggle P1.0, Interval Overflow ISR, 32kHz ACLK

//

//  Description: Toggle P1.0 using software timed by WDT ISR. Toggle rate is

//  exactly 250ms based on 32kHz ACLK WDT clock source.  In this example the

//  WDT is configured to divide 32768 watch-crystal(2^15) by 2^13 with an ISR

//  triggered @ 4Hz.

//  ACLK= LFXT1= 32768, MCLK= SMCLK= DCO~ 800kHz

//  //* External watch crystal installed on XIN XOUT is required for ACLK *//

//

//   MSP430F149

//             -----------------

//         /||              XIN|-

//          | |                 | 32kHz

//          --|RST          XOUT|-

//            |                 |

//            |             P1.0|-->LED

//

//  M. Buccini

//  Texas Instruments Inc.

//  Feb 2005

//  Built with IAR Embedded Workbench Version: 3.21A

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


#include 


void main(void)

{

  WDTCTL = WDT_ADLY_250;                    // WDT 250ms, ACLK, interval timer

  IE1 |= WDTIE;                             // Enable WDT interrupt

  P1DIR |= 0x01;                            // Set P1.0 to output direction


  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt

}


// Watchdog Timer interrupt service routine

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)

{

  P1OUT ^= 0x01;                            // Toggle P1.0 using exclusive-OR

}


上面的例子也是一样,只是选择了不同的时钟,而且低功耗模式不同;


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

//  MSP-FET430P140 Demo - WDT, Toggle P1.0, Interval Overflow ISR, HF XTAL ACLK

//

//  Description: Toggle P1.0 using software timed by the WDT ISR. In this

//  example the WDT is clocked with ACLK which is the same as the XTAL and

//  divided by the WDT by 512 triggering and ISR that will toggle P1.0.

//  ACLK= MCLK= LFXT1= HF XTAL

//  //* HF XTAL REQUIRED AND NOT INSTALLED ON FET *//

//  //* Min Vcc required varies with MCLK frequency - refer to datasheet *//

//

//   MSP430F149

//             -----------------

//         /||              XIN|-

//          | |                 | HF XTAL (455k - 8Mhz)

//          --|RST          XOUT|-

//            |                 |

//            |             P1.0|-->LED

//

//  M. Buccini

//  Texas Instruments Inc.

//  Feb 2005

//  Built with IAR Embedded Workbench Version: 3.21A

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


#include 


void main(void)

{

  volatile unsigned int i;

  WDTCTL = WDT_ADLY_16;                     // ACLK / 512, interval timer

  BCSCTL1 |= XTS;                           // ACLK = LFXT1 = HF XTAL


  do

  {

  IFG1 &= ~OFIFG;                           // Clear OSCFault flag

  for (i = 0xFF; i > 0; i--);               // Time for flag to set

  }

  while ((IFG1 & OFIFG));                   // OSCFault flag still set?


  BCSCTL2 |= SELM_3;                        // MCLK = LFXT1 (safe)

  IE1 |= WDTIE;                             // Enable WDT interrupt

推荐阅读

史海拾趣

BSI公司的发展小趣事

随着电子产品的普及和消费者对产品质量的关注,电子产品测试和认证成为了一个必不可少的环节。BSI作为全球知名的认证机构,为电子产品提供了专业的测试和认证服务。通过严格的测试和认证流程,BSI确保了电子产品符合国际标准和客户需求,提高了产品的市场竞争力和信誉度。同时,BSI还为企业提供了定制化的商检解决方案,帮助企业在国际贸易中解决技术和法规问题,降低了贸易风险。

Elpac公司的发展小趣事

在电子行业的激烈竞争中,Elpac公司凭借其在电源管理领域的技术革新,逐渐崭露头角。公司创始人李明在创办之初就坚信,只有不断创新才能在市场中立足。他带领团队深入研究市场需求,不断推出具有创新性的电源管理产品。其中,一款高效节能的电源转换器在市场上引起了广泛关注,其出色的性能和稳定性赢得了客户的青睐。随着产品的热销,Elpac公司逐渐在电子行业中建立了自己的品牌地位。

巨盛电子(Chesen)公司的发展小趣事

随着环保意识的提高,消费者对环保产品的需求也越来越高。巨盛电子(Chesen)积极响应环保号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、优化生产工艺、加强废弃物处理等措施,减少了对环境的污染。同时,公司还积极开展环保宣传活动,提高了消费者对环保产品的认识和接受度。这些举措不仅塑造了巨盛电子的环保品牌形象,还为企业赢得了更多消费者的支持。

Ercona Corp公司的发展小趣事

随着环保意识的提高,消费者对环保产品的需求也越来越高。巨盛电子(Chesen)积极响应环保号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、优化生产工艺、加强废弃物处理等措施,减少了对环境的污染。同时,公司还积极开展环保宣传活动,提高了消费者对环保产品的认识和接受度。这些举措不仅塑造了巨盛电子的环保品牌形象,还为企业赢得了更多消费者的支持。

CTC [Compact Technology Corp.]公司的发展小趣事

CTC公司深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。通过与高校和研究机构的合作,CTC公司吸引了大批优秀的科研人才加入。同时,公司还建立了完善的培训体系,为员工提供持续的技能提升和职业发展机会。这些人才成为了CTC公司发展的中坚力量,为公司构筑了核心竞争力。

振华(CEC)公司的发展小趣事

中国振华电子集团有限公司(简称振华)自成立之初,就致力于电子产品的研发与生产。初期,公司面临着技术落后、资金短缺等诸多困难,但创始人及团队凭借坚定的信念和不懈的努力,成功开发出了一系列具有市场竞争力的电子产品。随着产品质量的提升和市场份额的扩大,振华逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

单片机 怎么用5v 来控制18v通断,用一个三极管控制

我要用的电压是18v,要用单片机来控制18v通断。 单片机工作在5v,IO口输出 high 也是5v low是0.1v,怎么用IO口控制一个三极管,来控制18v电压,三极管工作在开关状态。有做过这样类似的设计的朋友应该会明白我说的是什么意思。谢谢。 问题补充: ...…

查看全部问答>

手机领域的新创新

今日读了一些杂志,遇到一些有趣的手机领域的新创新概念产品,收集如下 1:太阳能手机电池:     顾名思义,有了这样的电池,你的手机就再也不怕没电了,你可以尽情通过你的手机听MP3,看手机电视或者MP4,打游戏,上网等等。不过这个 ...…

查看全部问答>

关于调试wince内核的问题

我的QQ2440v3说明书上说“使用Download & Run 功能,您还可以把程序下载到内存马上运行,这对于开发”,我知道那功能是在友善提供的DNW工具中,但不知道怎么用,请高手赐教。有没有哪位高手用过这功能的…

查看全部问答>

帮忙分析下:WinCE下的拨号问题

  我用的是wince5.0的系统,系统起来后,如果手动点击拨号连接,那么可以拨上网络,而且断开后继续拨也基本都能成功。 如果是应用程序调用RasDial来拨号,发现即使拨上去了,那么调用RasHangUp挂断网络后,经常就无法拨上网络了。 而且 ...…

查看全部问答>

文件映射

谁能给个文件映射的例子: 这是进程1中的代码:                   //创建文件         HANDLE hfile = CreateFileForMapping(           &n ...…

查看全部问答>

USB资料及开发手册

本帖最后由 paulhyde 于 2014-9-15 04:16 编辑 主要包括开发知道和常用的USB开发工具,还带PPT讲解,在每个文件夹里有分类好的东西,算是比较全面的资料了,刚注册该网站,请多多支持,帮忙顶一下哈  …

查看全部问答>

LM3S的调试方法->在RAM中运行程序

如果每次调试仿真都要烧写flash的话,是很麻烦尤其是代码量比较大,每次擦除flash,编程flash,校验flash,下载调试代码,然后才能进入调试环境,这样下来很费时间,而在ram中调试烧写代码到ram就相当快了,大大加快了调试速度,缺点就是RAM的空间有一定限制. ...…

查看全部问答>

各位师兄请问怎么读出 MSP430F149 的GIE 位!请指教!

各位师兄请问怎么读出 MSP430F149 的GIE 位! 最好的用C 语言汇编也可! 急急! :confused:…

查看全部问答>