看门狗定时器是一个32位定时器,可以用作看门狗或间隔定时器。 看门狗定时器模块的主要功能是在出现软件问题后执行受控的系统重启。如果超过选定的时间间隔,将生成系统复位。如果应用程序不需要看门狗功能,则模块可配置为间隔定时器,并可在选定的时间间隔内生成中断。 看门狗定时器模块的特点包括: - 密码保护访问看门狗定时器控制(WDTCTL)寄存器
注:看门狗定时器上电时自动激活 在PUC之后,WDT_A模块自动配置为看门狗模式,初始复位间隔为32ms,使用SMCLK。用户必须在这个初始重置间隔到期之前设置或停止WDT_A。 看门狗定时器模块可以利用WDTCTL寄存器配置为看门狗定时器或间隔定时器。WDTCTL是一个16位密码保护读/写寄存器。任何读写访问必须使用word指令,写访问必须在高位字节中包含写密码05Ah。对WDTCTL的任何写入操作,如果高字节中的值不是05Ah,则会违反密码并触发PUC系统复位,且无论定时器处于何种模式。对WDTCTL的任何读取高位字节的值为069h。以字节方式无论读取WDTCTL高字节或低字节返回的都是低字节的值。以字节方式无论写入WDTCTL高字节或低字节都将触发PUC系统复位。 WDTCNT是一个32位增计数器,不能由软件直接访问。通过看门狗定时器控制寄存器(WDTCTL)控制WDTCNT,并选择其时间间隔。WDTCNT的时钟来自SMCLK、ACLK、VLOCLK或X_CLK。时钟源由WDTCTL.WDTSSEL位选择。定时器间隔由WDTCTL.WDTIS位选择。 看门狗模式: PUC后,使用SMCLK作为时钟将WDT模块配置为看门狗模式,初始重置间隔为32ms。用户必须在初始重置间隔到期之前,设置、停止或清除看门狗计时器。当看门狗定时器配置为在看门狗模式下运行时,使用错误的密码写入WDTCTL,或者所选时间间隔过期将触发PUC。PUC将看门狗计时器重置为其默认状态。 工程介绍: MCU型号: MSP430F6736A 编译平台: IAR for MSP430 6.40.1 实验项目: Watchdog: 用作看门狗模式 看门狗定时器溢出时间为250ms, 测试看门狗溢出复位功能 系统上电后将流水灯全部点亮31.25ms后再熄灭, 然后等待看门狗溢出, 系统复位, 流水灯全部点亮31.25ms后再熄灭, 如此循环 选择 REFOCLK (内部校准的低频振荡器, 典型频率为32.768 kHz) 作为 ACLK SMCLK MCLK #include "msp430.h"#include "msp430f6736a.h"void main(void){ // 看门狗定时器时钟=ACLK=32.768 kHz // 看门狗模式 // 定时器清0 // 看门狗定时器时钟/(2^13) = 32768 / 8192 = 4Hz (250ms) WDTCTL = WDTPW + WDTSSEL__ACLK + WDTCNTCL + WDTIS2 + WDTIS0; // 选择 REFO (内部校准的低频振荡器, 典型频率为32.768 kHz): 作为 ACLK SMCLK MCLK UCSCTL4 = SELA__REFOCLK | SELS__REFOCLK | SELM__REFOCLK; // PORT 3 : P3.7 P3.6 P3.5 P3.4用作流水灯输出, 管脚功能:I/O 模式:输出 P3SEL = 0; P3DIR = 0xf0; P3OUT = 0xf0; P3OUT = 0x00; // 流水灯全部点亮 __delay_cycles(1024); // 等待时间 1024 / MCLK = 1024 / 32768 = 31.25ms P3OUT = 0xff; // 流水灯全部熄灭 while(1); // 等待看门狗溢出, 复位系统}
间隔定时器模式 将WDTCTL.WDTTMSEL=1可选择间隔定时器模式。此模式可用于提供周期性中断。在间隔定时器模式下,SFRIFG1.WDTIFG标志在选定的时间间隔到期时置位。在所选定时器间隔到期时,不会在间隔定时器模式下生成PUC,并且WDTIFG的允许位SFRIE1.WDTIE保持不变。 设置SFRIE1.WDTIE位和GIE位时,SFRIFG1.WDTIFG标志请求中断。当中断请求被处理时,SFRIFG1.WDTIFG中断标志会自动复位,或者可以通过软件重置。间隔定时器模式下的中断向量地址不同于看门狗模式下的中断向量地址 注:修改看门狗定时器 在一条指令中,看门狗定时器间隔应与WDTCTL.WDTCNTCL=1一起更改,以避免意外的立即PUC或中断。在更改时钟源之前,应停止看门狗计时器,以避免可能出现的错误间隔。 工程介绍: MCU型号: MSP430F6736A 编译平台: IAR for MSP430 6.40.1 实验项目: Watchdog: 用作间隔定时器模式 选择 REFOCLK 作为 ACLK SMCLK MCLK 看门狗时钟采用ACLK, 间隔时间=250ms, 以此间隔时间顺序点亮流水灯 #include "msp430.h"#include "msp430f6736a.h"char LampValue;void main(void){ // 看门狗定时器时钟=ACLK=32.768 kHz // 间隔定时器模式 // 定时器清0 // 看门狗定时器时钟/(2^13) = 32768 / 8192 = 4Hz (250ms) WDTCTL = WDTPW + WDTSSEL__ACLK + WDTTMSEL + WDTCNTCL + WDTIS2 + WDTIS0; SFRIE1 |= WDTIE; // 允许 WDT 中断 // 选择 REFO (内部校准的低频振荡器, 典型频率为32.768 kHz): 作为 ACLK SMCLK MCLK UCSCTL4 = SELA__REFOCLK | SELS__REFOCLK | SELM__REFOCLK; // PORT 3 : P3.7 P3.6 P3.5 P3.4用作流水灯输出, 管脚功能:I/O 模式:输出 P3SEL = 0; P3DIR = 0xf0; P3OUT = 0xf0; // 中断总使能 __bis_SR_register(GIE); LampValue = 0x10; while(1);}/*********************************************************** Watchdog 中断服务程序**********************************************************/#pragma vector=WDT_VECTOR__interrupt void WDT_ISR(void){ P3OUT = ~LampValue; LampValue = LampValue<<1; if (LampValue == 0x00) LampValue = 0x10;}
|
最新评论
查看全部评论(1)