看门狗定时器课件.ppt_第1页
看门狗定时器课件.ppt_第2页
看门狗定时器课件.ppt_第3页
看门狗定时器课件.ppt_第4页
看门狗定时器课件.ppt_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、看门狗定时器,所谓程序跑飞就是PC指针没有按照预定的程序变更,可能PC指针指向一个不确定的或者根本就没有存放用户代码的程序存贮空间,造成PC指针根本无法恢复到用户代码空间之内,程序跑飞,当发生中断时,中断服务程序代码仍然可以被执行。 在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰信号噪声。这些干扰信号作用于数字器件,极易引发错误动作,引起“程序跑飞”事故! 看门狗的目的在于阻止程序跑飞。在正常操作期间,一次WDT定时时间到,将产生一次器件复位。,如果通过编制程序使WDT定时时间略微大于程序执行一次的时间,并且程序执行过程中有对看门狗定时器清零的指令,使计数器重新计数,则程

2、序正常运行时,就会在WDT定时时间到之前对WDT清零(定时喂狗),不会产生WDT溢出。 如果由于干扰使程序跑飞,则不会在WDT定时时间到之前执行WDT清零指令,则WDT就会产生溢出,从而自动产生系统复位,CPU需要重新运行用户程序,这样程序就可以重新回到正常运行状态!,看门狗定时器,MSP430X5XX / 6XX系列单片机的看门狗定时器原理,如下图所示:,WDT 的相关寄存器,一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零 ,就是说MSP430的看门狗在此时处于默认开启的状态。 1. 记数单元WDTCNT: WDTCNT是16位增记数器,由MSP430

3、选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。 2. 控制寄存器WDTCTL: WDTCTL由两部分组成,高8位用作口令,即5AH(头 文件中定义为WDTPW),低8位是对WDT操作 的控制命令。写入WDT控制命令时先写入口令WDTPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的 值,高字节读出始终为69H。,IS1 SI0选择看门狗定时器的定时输出,T为WDTCNT的 输入时钟源周期。TMSEL WDT工作模式选择 00 T*2的15次方 计数次数为 32 768; 01

4、 T*2的13次方计数次数为 8 192; 10 T*2的9次方计数次数为 512; 11 T*2的6次方计数次数为 64 。 SSEL 选择WDTCNT的时钟源1RST/NMI为非屏 蔽中断输入 0 SMCLK 1 ACLK,WDT的定时 时间表(有且仅有这8 种) 晶体为32 768Hz,SMCLK=1MHz。,CNTCL 当该位为 1 时,表示清除WDTCNT ,该位具有自动复0的功能,无需软件重置。亦即传说 中的定时“喂狗”! 注意: WDT 计数器中的值无法直接清除,只能通过CNTCL 置1实现! TMSEL 工作模式的选择 0 :看门狗模式; 1 :定时器模式。,NMI选择RET

5、/ NMI 引脚功能,在PUC后被复位。 0 : RET / NMI 引脚为复位端; 1 : RET / NMI 引脚为边沿触发的非屏蔽中断输入。 NMIES 选择NMI中断的边沿触发方式 0 上升沿触发NMI中断 1 下降沿触发NMI中断 HOLD 停止看门狗定时器工作 0 看门狗功能激活 1 时钟禁止输入,记数停止,看门狗的三种工作模式,1.看门狗有 三种工作模式:停止模式,计时器模式,看门狗模式。 2.其中后两种模式可以选择的时钟源有: SMCLK 和 ACLK 3.在使用后两种模式时候要注意单片机所处的状态下看门狗能否工作,如单片机处在LPM3时候只有ACLK时钟,处在LPM4下,没有

6、时钟可以使用。,停止模式:关闭看门狗 C语言实现:WDTCTL = WDTPW + WDTHOLD; 我们用得最多的语句,也是430低功耗的实现语句之一! 计时器模式:作为一个计时器使用,计数器满产生中断时执行看门狗中断函数。 C语言实现: 主程序中:开启看门狗计时器,如: WDTCTL = WDT_MDLY_8; 或WDTCTL = WDT_ADLY_250;等 看门狗中断函数为: #pragma vector = WDT_VECTOR _interrupt void watchdog_timer(void) /. ,看门狗模式:计数溢出时,执行复位中断函数。 C语言实现: 清看门狗: WD

7、TCTL = WDTPW+WDTCNCTL; 设置看门狗: WDTCTL = WDT_MRST_0_5; /* TSMCLK*2POWER9=0.512ms*/ 或WDTCTL = WDT_ARST_1000; /* TACLK*2POWER15=1000ms*/,寄存器宏定义,SFR_16BIT(WDTCTL); #define WDTIS0 (0 x0001) #define WDTIS1 (0 x0002) #define WDTSSEL (0 x0004) #define WDTCNTCL (0 x0008) #define WDTTMSEL (0 x0010) #define WDT

8、NMI (0 x0020) #define WDTNMIES (0 x0040) #define WDTHOLD (0 x0080) #define WDTPW (0 x5A00) #define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) #define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) #define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) #define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WD

9、TIS0) #define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) #define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) #define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) #define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) #define WDT_MRST_32 (WDTPW+WDTCNTCL) #define W

10、DT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) #define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) #define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) #define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) #define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) #define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) #define WDT_ARS

11、T_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0),#define _MSP430_HAS_WDT_,看门狗定时器,例,使用看门狗定时功能产生一个方波(周期性的取反P1.0) 程序代码如下: # include void main(void) WDTCTL = WDT_MDLY_32; / 定时周期为32ms SFRIE1 |= WDTIE; / 使能WDT中断 P1DIR |= BIT0; / P1.0输出 _enable_interrupt(); / 系统中断允许 for (;) / 进入 LPM0 _bis_SR_register(LPM0_bits

12、); / 进入低功耗LPM0 _no_operation(); / 用于调试 ,/ 看门狗中断服务子程序 #pragma vector= WDT_VECTOR _interrupt void watchdog_timer (void) P1OUT = BIT0; / P1.0取反 ,看门狗定时器,#include void main(void) WDTCTL = WDT_ADLY_250; / WDT 250ms, ACLK, interval timer SFRIE1 |= WDTIE; / Enable WDT interrupt P1DIR |= 0 x01; / Set P1.0 to

13、 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 = 0 x01; / Toggle P1.0 using exclusive-OR ,WATCHDOG计数溢出的控制,#include void Clear_WDT(void); void main( void ) unsigned int i; WDTCTL=WDTPW+WDTHOLD; /关闭看门狗 P4DIR |=BIT0; P4OUT /计数器清零 ,程序对WATCHDOG 计数溢出的控制 WDT看门狗模式 本程序中,不断对WDT的看门狗计数器及时清零,LED不再闪烁,主要程序运行正常,看门狗不会使程序复位, 同时也

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论