历史上的今天
今天是:2025年01月29日(星期三)
2020年01月29日 | MSP430的看门狗常见用法以及中断函数的书写方法
2020-01-29 来源:eefocus
今天下午看了一下MSP430的看门狗的基本用法
看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用
示例代码:用看门狗定时器使一个led闪烁
#include 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;//异或操作基本上是取反操作 } 注意这里有一个比较好的宏定义:WDTCTL = WDT_MDLY_32;进入该宏定义会发现类似的宏定义有很多 /* 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 " */ 这里我们可以根据通常的需要,选择合适的定时时间 说到定时时间,这里又不得不讲一下中断函数,在IAR这个编译环境中,一般中断函数的写法是 #pragma vector = 中断向量 __interrupt void 中断函数名(void) { 用户程序; } 注意,中断向量可以在430的头文件中查找,中断函数的声明必须是void 中断函数名(void),这是因为中断函数没有返回值,也没有中断的形式参数 但是本人又在网站上看到另外一种用switch来写的,就是一个中断源对应几个中断向量,这种写法目前我还没有见过源码,所以不好总结
下一篇:MSP430看门狗的使用
史海拾趣
|
中心论题: RF功率LDMOSFET性能特征RF功率LDMOSFET基本结构和制造工艺特点产品设计难点分析和解决方案器件的关键参数工艺难点和解决方案 解决方案: 设计了特殊栅结构和工艺制造流程P-阱和N+源区通过两次多晶单边自对准注入形成P+阱沟道的杂质浓 ...… 查看全部问答> |
|
wince5.0自带s3c2410BSP的interrupthandle()函数当中的NKCallIntChain()作用 在WinCE 5.0自带的s3c2410当中的interrupthandle()当中的 sysIntr = NKCallIntChain((UCHAR)irq); if (sysIntr == SYSINTR_CHAIN || !NKIsSysIntrValid(sysIntr)) &nb ...… 查看全部问答> |
|
Code Composer Studio™ IDE v4 免费试用版主要特性与优势 下载您的 Code Composer Studio™ IDE v4 免费试用版,获得 MSP430、C2000、C5000、C6000、Stellaris Cortex-M3、Sitara、Davinci 以及 OMAP 处理器的无缝支持!尊敬的客户,德州仪器 (TI)最新 Code Composer Studio™ 集成开发环境 ...… 查看全部问答> |
|
103VBT6用TIM1,一路发脉冲,另一路来计所发脉冲可以吗? 如果用STM32F103VBT6 TIM1的1通道发脉冲,2通道来计1通道的脉冲数,然后根据第2通道所计脉冲数来控制 ...… 查看全部问答> |




