看门狗定时器课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 看门狗的目的在于阻止程序跑飞。在正常操作期间,一 次WDT定时时间到,将产生一次器件复位。
• 如果通过编制程序使WDT定时时间略微大于程序执 行一次的时间,并且程序执行过程中有对看门狗定时 器清零的指令,使计数器重新计数,则程序正常运行 时,就会在WDT定时时间到之前对WDT清零(定时 喂狗),不会产生WDT溢出。 • 如果由于干扰使程序跑飞,则不会在WDT定时时间 到之前执行WDT清零指令,则WDT就会产生溢出, 从而自动产生系统复位,CPU需要重新运行用户程序 ,这样程序就可以重新回到正常运行状态!
#define __MSP430_HAS_WDT__ SFR_16BIT(WDTCTL); #define WDTIS0 (0x0001) #define WDTIS1 (0x0002) #define WDTSSEL (0x0004) #define WDTCNTCL (0x0008) #define WDTTMSEL (0x0010) #define WDTNMI (0x0020) #define WDTNMIES (0x0040) #define WDTHOLD (0x0080) #define WDTPW (0x5A00) #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+WDTIS0) #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 WDT_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_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)
看门狗定时器
MSP430X5XX / 6XX系列单片机的看门狗定时器原理, 如下图所示:
WDT 的相关寄存器
一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在 上电和系统复位内容全部清零 ,就是说MSP430的看门狗 在此时处于默认开启的状态。 • 1. 记数单元WDTCNT: WDTCNT是16位增记数器,由MSP430选定的时钟电 路产生的固定周期脉冲信号对记数器进行加法记数。 WDTCNT不能直接软件存取,必须通过看门狗定时器 的控制寄存器WDTCTL来控制。 • 2. 控制寄存器WDTCTL: WDTCTL由两部分组成,高8位用作口令,即5AH(头 文件中定义为WDTPW),低8位是对WDT操作 的控制 命令。写入WDT控制命令时先写入口令WDTPW,口 令写错将导致系统复位。读WDTCTL时不需口令,低 字节WDTCTL的 值,高字节读出始终为69H。
bit
相关内 容
15-8
口令
7
HOLD
6
NMIES
5
NMI
4
TMSEL
3
CNTCL
2
SSEL
1源自文库
IS1
0
IS0
IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的 输入时钟源 周期。TMSEL WDT工作模式选择
0 0 1 1
SSEL
0 1 0 1
T*2的15次方 T*2的13次方 T*2的9次方 T*2的6次方
停止模式:关闭看门狗 C语言实现:WDTCTL = WDTPW + WDTHOLD; 我们用得最多的语句,也是430低功耗的实现语句之一!
计时器模式:作为一个计时器使用,计数器满产生中断时 执行看门狗中断函数。 C语言实现: 主程序中:开启看门狗计时器,如: WDTCTL = WDT_MDLY_8; 或 WDTCTL = WDT_ADLY_250; 等 看门狗中断函数为: #pragma vector = WDT_VECTOR __interrupt void watchdog_timer(void) { //................... }
看门狗定时器
• 所谓程序跑飞就是PC指针没有按照预定的程序变更,可 能PC指针指向一个不确定的或者根本就没有存放用户代 码的程序存贮空间,造成PC指针根本无法恢复到用户代 码空间之内,程序跑飞,当发生中断时,中断服务程序 代码仍然可以被执行。
• 在工业现场,往往会由于供电电源、空间电磁干扰或其 他原因引起强烈的干扰信号噪声。这些干扰信号作用于 数字器件,极易引发错误动作,引起“程序跑飞”事故 !
0 1
0 1 0 1 1
1 1
0 1 0 0 0
0 1
1 0 0 1 0
0.5 1.9
8 16 32 250 1000
Tsmclk * 29 Taclk * 26
Tsmclk * 213 Taclk * 29 Tsmclk * 215 Taclk * 213 Taclk * 215
bit
相关内容
15-8 口令
bit
相关内容
15-8 口令
7
HOLD
6
NMIES
5
NMI
4
TMSEL
3
CNTCL
2
SSEL
1
IS1
0
IS0
NMI
选择RET / NMI 引脚功能,在PUC后被复位。 0 : RET / NMI 引脚为复位端;
1 : RET / NMI 引脚为边沿触发的非屏蔽中断输入。
NMIES 选择NMI中断的边沿触发方式 0 上升沿触发NMI中断 1 下降沿触发NMI中断 HOLD 停止看门狗定时器工作 0 看门狗功能激活 1 时钟禁止输入,记数停止
看门狗模式:计数溢出时,执行复位中断函数。 C语言实现: 清看门狗: WDTCTL = WDTPW+WDTCNCTL;
设置看门狗: WDTCTL = WDT_MRST_0_5; /* TSMCLK*2POWER9=0.512ms */ 或 WDTCTL = WDT_ARST_1000; /* TACLK*2POWER15=1000ms */ 寄存器宏定义
计数次数为 32 768; 计数次数为 8 192; 计数次数为 512; 计数次数为 64 。
RST/NMI为非屏 蔽中断输入
选择WDTCNT的时钟源 1 0 1 SMCLK ACLK
WDT的定时 时间表(有且仅有这8 种)
晶体为32 768Hz,SMCLK=1MHz。
SSEL 0 IS1 1 IS0 1 0.056 定时时间 / ms Tsmclk * 26
7
HOLD
6
NMIES
5
NMI
4
TMSEL
3
CNTCL
2
SSEL
1
IS1
0
IS0
CNTCL 当该位为 1 时,表示清除WDTCNT ,该位具有自动复0的功能, 无需软件重置。亦即传说 中的定时“喂狗”!
注意: WDT 计数器中的值无法直接清除,只能通过CNTCL 置1实现!
TMSEL 工作模式的选择 0 :看门狗模式; 1 :定时器模式。
看门狗的三种工作模式
1. 看门狗有 三种工作模式:停止模式,计时器模式,看 门狗模式。 2. 其中后两种模式可以选择的时钟源有:
SMCLK 和 ACLK
3. 在使用后两种模式时候要注意单片机所处的状态下看门 狗能否工作,如单片机处在LPM3时候只有ACLK时钟, 处在LPM4下,没有时钟可以使用。
• 如果通过编制程序使WDT定时时间略微大于程序执 行一次的时间,并且程序执行过程中有对看门狗定时 器清零的指令,使计数器重新计数,则程序正常运行 时,就会在WDT定时时间到之前对WDT清零(定时 喂狗),不会产生WDT溢出。 • 如果由于干扰使程序跑飞,则不会在WDT定时时间 到之前执行WDT清零指令,则WDT就会产生溢出, 从而自动产生系统复位,CPU需要重新运行用户程序 ,这样程序就可以重新回到正常运行状态!
#define __MSP430_HAS_WDT__ SFR_16BIT(WDTCTL); #define WDTIS0 (0x0001) #define WDTIS1 (0x0002) #define WDTSSEL (0x0004) #define WDTCNTCL (0x0008) #define WDTTMSEL (0x0010) #define WDTNMI (0x0020) #define WDTNMIES (0x0040) #define WDTHOLD (0x0080) #define WDTPW (0x5A00) #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+WDTIS0) #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 WDT_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_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)
看门狗定时器
MSP430X5XX / 6XX系列单片机的看门狗定时器原理, 如下图所示:
WDT 的相关寄存器
一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在 上电和系统复位内容全部清零 ,就是说MSP430的看门狗 在此时处于默认开启的状态。 • 1. 记数单元WDTCNT: WDTCNT是16位增记数器,由MSP430选定的时钟电 路产生的固定周期脉冲信号对记数器进行加法记数。 WDTCNT不能直接软件存取,必须通过看门狗定时器 的控制寄存器WDTCTL来控制。 • 2. 控制寄存器WDTCTL: WDTCTL由两部分组成,高8位用作口令,即5AH(头 文件中定义为WDTPW),低8位是对WDT操作 的控制 命令。写入WDT控制命令时先写入口令WDTPW,口 令写错将导致系统复位。读WDTCTL时不需口令,低 字节WDTCTL的 值,高字节读出始终为69H。
bit
相关内 容
15-8
口令
7
HOLD
6
NMIES
5
NMI
4
TMSEL
3
CNTCL
2
SSEL
1源自文库
IS1
0
IS0
IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的 输入时钟源 周期。TMSEL WDT工作模式选择
0 0 1 1
SSEL
0 1 0 1
T*2的15次方 T*2的13次方 T*2的9次方 T*2的6次方
停止模式:关闭看门狗 C语言实现:WDTCTL = WDTPW + WDTHOLD; 我们用得最多的语句,也是430低功耗的实现语句之一!
计时器模式:作为一个计时器使用,计数器满产生中断时 执行看门狗中断函数。 C语言实现: 主程序中:开启看门狗计时器,如: WDTCTL = WDT_MDLY_8; 或 WDTCTL = WDT_ADLY_250; 等 看门狗中断函数为: #pragma vector = WDT_VECTOR __interrupt void watchdog_timer(void) { //................... }
看门狗定时器
• 所谓程序跑飞就是PC指针没有按照预定的程序变更,可 能PC指针指向一个不确定的或者根本就没有存放用户代 码的程序存贮空间,造成PC指针根本无法恢复到用户代 码空间之内,程序跑飞,当发生中断时,中断服务程序 代码仍然可以被执行。
• 在工业现场,往往会由于供电电源、空间电磁干扰或其 他原因引起强烈的干扰信号噪声。这些干扰信号作用于 数字器件,极易引发错误动作,引起“程序跑飞”事故 !
0 1
0 1 0 1 1
1 1
0 1 0 0 0
0 1
1 0 0 1 0
0.5 1.9
8 16 32 250 1000
Tsmclk * 29 Taclk * 26
Tsmclk * 213 Taclk * 29 Tsmclk * 215 Taclk * 213 Taclk * 215
bit
相关内容
15-8 口令
bit
相关内容
15-8 口令
7
HOLD
6
NMIES
5
NMI
4
TMSEL
3
CNTCL
2
SSEL
1
IS1
0
IS0
NMI
选择RET / NMI 引脚功能,在PUC后被复位。 0 : RET / NMI 引脚为复位端;
1 : RET / NMI 引脚为边沿触发的非屏蔽中断输入。
NMIES 选择NMI中断的边沿触发方式 0 上升沿触发NMI中断 1 下降沿触发NMI中断 HOLD 停止看门狗定时器工作 0 看门狗功能激活 1 时钟禁止输入,记数停止
看门狗模式:计数溢出时,执行复位中断函数。 C语言实现: 清看门狗: WDTCTL = WDTPW+WDTCNCTL;
设置看门狗: WDTCTL = WDT_MRST_0_5; /* TSMCLK*2POWER9=0.512ms */ 或 WDTCTL = WDT_ARST_1000; /* TACLK*2POWER15=1000ms */ 寄存器宏定义
计数次数为 32 768; 计数次数为 8 192; 计数次数为 512; 计数次数为 64 。
RST/NMI为非屏 蔽中断输入
选择WDTCNT的时钟源 1 0 1 SMCLK ACLK
WDT的定时 时间表(有且仅有这8 种)
晶体为32 768Hz,SMCLK=1MHz。
SSEL 0 IS1 1 IS0 1 0.056 定时时间 / ms Tsmclk * 26
7
HOLD
6
NMIES
5
NMI
4
TMSEL
3
CNTCL
2
SSEL
1
IS1
0
IS0
CNTCL 当该位为 1 时,表示清除WDTCNT ,该位具有自动复0的功能, 无需软件重置。亦即传说 中的定时“喂狗”!
注意: WDT 计数器中的值无法直接清除,只能通过CNTCL 置1实现!
TMSEL 工作模式的选择 0 :看门狗模式; 1 :定时器模式。
看门狗的三种工作模式
1. 看门狗有 三种工作模式:停止模式,计时器模式,看 门狗模式。 2. 其中后两种模式可以选择的时钟源有:
SMCLK 和 ACLK
3. 在使用后两种模式时候要注意单片机所处的状态下看门 狗能否工作,如单片机处在LPM3时候只有ACLK时钟, 处在LPM4下,没有时钟可以使用。