版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。 一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零 1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。 2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8
2、位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。写入WDT控制命令时先写入口令WDTPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。 bit 15-8 7 6
3、60; 5 4 3 2 1&
4、#160; 0 口令 HOLD NMIES NMI TMSEL CNT
5、CL SSEL IS1 IS0 IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的输入时钟源周期。 TMSEL WDT工作模式选择 0 0 T*2的15次方
6、160;
7、160; 0 看门狗模式 0 1 T*2的13次方
8、160;
9、160; 1 定时器模式 1 0 T*2的9次方
10、60;
11、60; NMI 选择RST/NMI引脚功能 1 1 T*2的6次方
12、0;
13、0; 0 RST/NMI为复位端 SSEL 选择WDTCNT的时钟源
14、0;
15、0; 1 RST/NMI为非屏蔽中断输入 0 SMCLK
16、160; 1 ACLK NMIES 选择NMI中断的边沿触发方式
17、60; HOLD 停止看门狗定时器工作 0
18、60; 上升沿触发NMI中断
19、0; 0 看门狗功能激活 1 下降沿触发NMI中断
20、;
21、; 1 时钟禁止输入,记数停止 二、WDT的操作 1.用户通过设置WDTCTL中的TMSEL和HOLD控制位使WDT工作在看门狗模式、定时器模式和低功耗模式三种模式。 a.看门狗模式 (TMSEL=0 ,HOLD=0) 如果记数时间到,就会产生复位和激活系统上电清除信号,系统从上电复位的地址重启动
22、160; 中断向量为RESET_VECTOR b.定时器模式(TMSEL=1,HOLD=0) 这一模式产生选定时间的周期性中断 中断标志位为WDTIFG 中断向量为 WDT_VECTOR c.低功耗模式(TMSEL=X,HOLD=1) WDTCTL=WDTPW+WDTHOLD; 2.WDT通过SSEL 和IS0 IS1 3位可以确定与8种时钟源相关的时间(ACLK=32768Hz,SMCLK=1MHz) WDT_MDLY_32
23、160; WDT_MRST_32 WDT_MDLY_8
24、60; WDT_MRST_8 WDT_MDLY_0_5
25、60; WDT_MRST_0_5 WDT_MDLY_0_064
26、; WDT_MRST_0_064 WDT_ADLY_1000
27、0; WDT_ARST_1000 WDT_ADLY_250
28、 WDT_ARST_250 WDT_ADLY_16
29、0; WDT_ARST_16 WDT_ADLY_1_9
30、60; WDT_ARST_1_9 三、看门狗应用 使用看门狗定时器产生一个方波(周期性取反P1.0) #include "msp430x201x.h" void main(void) WDT=WDT_MDLY_32;
31、160; IE1 |=WDTIE; P1DIR |=0x01; _EINT(); for(;) _BIS_SR(CPUOFF); _NOP(); interruptWDT_VECTOR void watchdog_timer(void) P1OUT
32、=0x01; / MSP430x5xx/ -/ /| XIN|-/ | | XOUT|-/ -|RST |/ | P1.7|->S1/ | P1.0|->LED#include <msp430f5529.h>/函数声明void timerA0_ini(void);void timerA1_ini(void);void clk_set(void);void S1_ini(void);unsigned int flag = 0;unsigned int flagFREQ = 3;unsigned int CCR0 = 100;unsigned int step = 1;un
33、signed int step_default = 1;void main(void)WDTCTL = WDTPW + WDTHOLD; / Stop WDTclk_set();P1DIR |= BIT2; / P1.2 outputP1DIR |= BIT3+BIT4+BIT5;P1OUT &= 0xC7;P1SEL |= BIT2;timerA0_ini();timerA1_ini();S1_ini();_EINT();while(1);#pragma vector=TIMER1_A0_VECTOR_interrupt void TIMER1_A0_ISR(void)if (fla
34、g = 0)TA0CCR1 += step;if (TA0CCR1 >= TA0CCR0)flag = 1;else if (flag = 1)TA0CCR1 -= step;if (TA0CCR1 <= 0)flag = 0;/* *Name:PORT1_ISR *description :PORT1中断服务函数,按键S1按下时在P1.7 *description 产生中断,此时更新CCR0值,实现更改LED *description 闪烁频率的增减 *input:延时时间(ms) *output:N/A */# pragma vector=PORT1_VECTOR_interr
35、upt void PORT1_ISR(void)_delay_cycles(1000);if ( P1IFG & BIT7 )if(flagFREQ>=5)flagFREQ=1;elseflagFREQ+;TA1CCR0 = 32768/(200/flagFREQ);P1OUT = (P1OUT&0xC7) | flagFREQ<<3;/_EINT();P1IFG &= BIT7;void timerA1_ini(void)/timerA初始化TA1CCR0 = 546;TA1CTL = TASSEL_ACLK + MC_UP + TACLR ;TA1
36、CCTL0 = CCIE;void timerA0_ini(void)/timerA初始化TA0CCR0 = 100;TA0CCR1 = 0;TA0CTL = TASSEL_SMCLK + MC_UP + TACLR ;TA0CCTL1 = OUTMOD_3;/* *Name:S1_ini *description :S1开关管脚中断初始化 *input:N/A *output:N/A */void S1_ini(void)P1REN |= BIT7; / 使能P1.7端口电阻P1OUT |= BIT7; / 设置P1.7端口电阻为上拉(如果该位置低,则设置成下拉电路)P1IES |= BIT
37、7; /选择触发边沿,下降沿触发volatileP1IE |= BIT7; /打开P1.7的中断P1IFG &= 0x00; /清零中断标志位void clk_set(void)P5SEL |= BIT2+BIT3; / Port select XT2UCSCTL6 &= XT2OFF; / Enable XT2UCSCTL3 |= SELREF_2; / FLLref = REFO/ Since LFXT1 is not used,/ sourcing FLL with LFXT1 can cause/ XT1OFFG flag to setUCSCTL4 |= SELA_2
38、; / ACLK=REFO,SMCLK=DCO,MCLK=DCO/ Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settlesdoUCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG);/ Clear XT2,XT1,DCO fault flagsSFRIFG1 &= OFIFG; / Clear fault flagswhile (SFRIFG1&OFIFG); / Test oscillator fault flagUCSCTL6 &=
39、 XT2DRIVE0; / Decrease XT2 Drive according to/ expected frequencyUCSCTL4 |= SELS_5 + SELM_5; / SMCLK=MCLK=XT2UCSCTL6 = (UCSCTL6 & DIVS_0) | DIVS_4;/* * main.c */#include "msp430f5529.h"void S1_ini(void);void main(void) WDTCTL = WDTPW + WDTHOLD;P1DIR |= BIT0;S1_ini();_EINT();while(1);vo
40、id S1_ini(void)P1REN |= BIT7; / 使能P1.7端口电阻P1OUT |= BIT7; / 设置P1.7端口电阻为上拉(如果该位置低,则设置成下拉电路)P1IES |= BIT7; /选择触发边沿,下降沿触发P1IE |= BIT7; /打开P1.7的中断P1IFG &= BIT7; /清零中断标志位# pragma vector=PORT1_VECTOR_interrupt void PORT1_ISR(void)_delay_cycles(1000);if ( P1IFG & BIT7 )P1OUT = BIT0;P1IFG &= BIT7
41、;/*/ MSP430 Blink the LED Demo - Software Toggle P1.0/ Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop./ ACLK = n/a, MCLK = SMCLK = default DCO/ MSP430x5xx/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ | P1.0|->LED/ J. Stevenson/ Texas Instruments, Inc/ July 2011/ Built with Code Composer Studio v5/*#include <msp430.h>int main(void)WDTCTL = WDTPW + WDTHO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论