历史上的今天
返回首页

历史上的今天

今天是:2025年05月27日(星期二)

正在发生

2021年05月27日 | MSP430学习小结1--看门狗的使用总结

2021-05-27 来源:eefocus

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


由于我用过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自己分析。


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

推荐阅读

史海拾趣

Advanced Illumination Inc公司的发展小趣事

品质是Ai公司发展的生命线。公司始终将品质管理放在首位,建立了严格的质量管理体系和检验流程。从原材料采购到产品出厂的每一个环节,公司都进行严格把控,确保产品的品质和性能达到最高标准。同时,公司还不断收集客户反馈,对产品进行持续改进和优化,以满足客户不断变化的需求。

對餘科技(DIOFIT)公司的发展小趣事

DIOFIT公司自创立之初,便面临着激烈的市场竞争和技术挑战。创始人团队凭借对电子技术的深入理解和热情,决心打造一家专注于高端电子产品研发和生产的企业。在资金紧张、人才匮乏的情况下,他们坚持自主研发,不断优化产品设计,最终成功推出了一款具有创新性的智能家居控制系统,赢得了市场的认可,为公司的发展奠定了坚实的基础。

Aristo-Craft/ L M P Inc公司的发展小趣事

随着公司产品的不断升级和优化,Aristo-Craft/L M P Inc开始积极寻求市场拓展的机会。他们不仅在国内市场建立了稳定的销售渠道,还通过参加国际展会、与海外企业建立合作关系等方式,成功打入国际市场。同时,公司还积极寻求与其他行业领导者的战略合作,共同推动电子行业的发展。

Geo Semiconductor Inc公司的发展小趣事
通过合理的布线、使用屏蔽线、加装滤波器等措施,减少外部电磁干扰对控制电路的影响。
中科芯(CKS)公司的发展小趣事

人才是企业发展的核心驱动力。中科芯高度重视人才队伍建设,通过引进和培养高素质人才、优化人才结构等措施,不断提升公司的创新能力和竞争力。同时,公司还创新激励机制,通过“揭榜挂帅”等形式吸引和激励人才投身重点项目的研发攻关。这些措施的实施不仅激发了员工的积极性和创造力,也为公司的持续发展提供了有力保障。

以上五个故事分别从中科芯的技术创新、科研成果、业绩增长、产品推广和人才队伍建设等方面展示了公司在电子行业中的发展历程和取得的成就。这些故事不仅展现了公司的实力和潜力,也体现了公司对社会和行业发展的贡献和担当。

ELANTEC (Renesas )公司的发展小趣事

近年来,随着全球半导体市场的不断变化和技术的快速发展,Renesas也面临着一些挑战。为了应对这些挑战并保持竞争力,Renesas开始进行战略转型和结构调整。公司加强了与客户的合作和沟通,深入了解市场需求和趋势;同时,Renesas还加大了对新技术和新产品的研发投入,不断提升自身的技术实力和创新能力。此外,Renesas还注重人才培养和引进,打造了一支高素质、专业化的团队。这些措施的实施使Renesas在应对挑战和转型过程中取得了积极的成效。

问答坊 | AI 解惑

IDT将蓬勃发展的中国半导体市场作为加速信息包处理发展策略的重要部分

IDT将蓬勃发展的中国半导体市场作为加速信息包处理发展策略的重要部分 IDT的产品将促进中国电信基础设施技术建设的跨越发展,并在全球电信市场中发挥重要作用 2004-04-26     全球领先的通信集成电路供应商——IDT公司计划进一步 ...…

查看全部问答>

CCS's autocomplete function (这个功能的使用你知道吗)

要使这个功能有用,写寄存器的时候须同时打开定义的.h文件。如果定CpuTimer0Regs,则要打开CPUtimers.h …

查看全部问答>

wince 可是识别网卡 但是从台式机不能ping到开发板

我的开发板是用cf卡的网卡,在wince中可以识别出是ne2000的网卡,并且也在网络设置那地方识别出了网卡,但是从台式机上ping开发板就是ping不通  是怎么回事啊…

查看全部问答>

PDA上可以做为网络通讯的server端吗??为什么我试过都不行

我想在PDA上开发一个程序用来跟PC机进行通讯,结果发现PDA上无法作为服务端,只能做为客户端?这是为什么? 我用的开发工具是VS.NET 2003,POCKET PC模拟器…

查看全部问答>

求助,有关MODBUS协议的问题,请路人指教

我预通过R485串口读取一个装置的数据,数据是以MODBUS的协议进行传输的,请问,我该如何去读取,麻烦高人给个详细的解答。小弟在此学习了,谢谢。…

查看全部问答>

一起来看看植在树上的LED红绿灯

    红绿灯也叫交通信号灯,是一种在大城市里每天维护交通秩序的重要工具之一。但或许是现有的交通信号灯存在不少缺陷,抑或是对未来交通信号灯美好的憧憬,设 计师们对交通信号灯做了一次又次的重新设计。这款由设计师Gisung Han, ...…

查看全部问答>

stm32f101仿真器时停不下来

不知道是哪错了~ 我在用JLINK仿真stm32f101的时候,发现点问题~ 可以烧写程序~进入主程序后~可以单步执行,可以运行到断点处~ 但是只要没有断点,全速运行后,点stop 停下来的时候 程序就自动关掉了~就报下面的这个错误(如图)~ 知道什么 ...…

查看全部问答>

如何把八位二进制数转为十进制数并用七段显示译码器输出

如题,求高手指点,能给出所用器件或电路图的更佳,先在此言谢…

查看全部问答>

【已换】两块LPC1227想换一块STM32F429

本帖最后由 wsdymg 于 2014-5-28 10:51 编辑 已换…

查看全部问答>