打印

MSP430的看门狗常见用法以及中断函数的书写方法

[复制链接]
388|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qwqsqaq1|  楼主 | 2019-2-17 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天下午看了一下MSP430的看门狗的基本用法
看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用
示例代码:用看门狗定时器使一个led闪烁
[url=][/url]
#include <msp430x14x.h>void  main( void ){  // Stop watchdog timer to prevent time out reset  WDTCTL = WDT_MDLY_32;//宏定义  IE1 |=WDTIE; //允许看门狗定时器中断  P2DIR |= BIT7;    _BIS_SR(LPM0_bits+GIE);//在这里的话将cpu进入低功耗模式}#pragma vector = WDT_VECTOR__interrupt void watchdag_timer(void){  P2OUT ^=BIT7;//异或操作基本上是取反操作}[url=][/url]


注意这里有一个比较好的宏定义:WDTCTL = WDT_MDLY_32;进入该宏定义会发现类似的宏定义有很多
[url=][/url]
/* 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   " */[url=][/url]

这里我们可以根据通常的需要,选择合适的定时时间
说到定时时间,这里又不得不讲一下中断函数,在IAR这个编译环境中,一般中断函数的写法是
#pragma vector = 中断向量
__interrupt void 中断函数名(void)
{
  用户程序;
}
注意,中断向量可以在430的头文件中查找,中断函数的声明必须是void 中断函数名(void),这是因为中断函数没有返回值,也没有中断的形式参数
但是本人又在网站上看到另外一种用switch来写的,就是一个中断源对应几个中断向量,这种写法目前我还没有见过源码,所以不好总结

版权所有,转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3405078.html

相关帖子

沙发
shenmu2012| | 2019-2-17 20:25 | 只看该作者
看门狗的设计的是软件设计中一重要环节的

使用特权

评论回复
板凳
shenmu2012| | 2019-2-17 20:26 | 只看该作者
这是在看门狗的中断中进行喂狗操作的还是?

使用特权

评论回复
地板
firstblood| | 2019-2-17 22:25 | 只看该作者
看门狗的设计首先是需要设计其时钟源的,这个需要独立于主频时钟的

使用特权

评论回复
5
comeon201208| | 2019-2-17 23:05 | 只看该作者
看门狗的设计不是很复杂的哈

使用特权

评论回复
6
comeon201208| | 2019-2-17 23:06 | 只看该作者
这个也可以用作定时器的来使用的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

26

帖子

0

粉丝