打印
[新手园地]

ddllxxrr笔记九 看门狗

[复制链接]
2262|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
当软件运行出错的时候,看门狗定时器用来复位系统,这可以防止系统进入死循环状态,看门狗定时器内含一个可编程时间溢出的19位计数器。详细性能和结构如下描述。

特性
19位看门狗定时器计数器
8种看门狗定时器溢出时间间隔选择
支持看门狗定时器中断和看门狗定时器复位

结构
设置WTCR.WTE[7]使能看门狗定时器,WDT计数器开始计数,当计数器达到设定的时间溢出值时,看门狗定时器中断标志WTIF立即置位,如果此时看门狗定时器中断使能标志位WTIE是‘1’那么将产生WDT中断,时间溢出事件发生后跟随一个特定的延时,在这个延时结束之前,用户必须通过设置WTCR.WTR为‘1’来复位19位WDT计数器从而避免CPU被看门狗定时器复位,WTR位在WDT计数器复位的时候被硬件自动清零,通过设置WTCR.WTIS[10:8]可以选择8种看门狗时间溢出间隙,这个延时结束之后如果WDT计数器还没有被清零,看门狗定时器将设置看门狗定时器复位标志(WTRF)为‘1’并复位CPU,这个复位将持续64个WDT时钟周期,然后CPU重新从复位向量(0x00000000)处开始执行程序。看门狗复位不会清除WTRF位,用户可以通过查询WTRF位来确认是否是看门狗复位.

新唐的看门狗就记住一个寄存器就行这个就是

WTCR
【10:8】 WTIS 看门狗定时器溢出时间选择
【7】        WTE  看门狗定时器使能
【6】        WTIE 看门狗定时器中断使能0禁止1使能
【3】        WTIF 看门狗中断标志
【2】        WTRF看门狗定时器复位标志 0没复位1复位了
【1】        WTRE看门狗定时器复位功能 0禁止看门狗1使能看门狗
【0】        WTR  看门狗定时器复置 0无用1看门狗定时器值重置


下边是看门狗的时钟选择及复位、中断原理图



下边是程序,我要说的是这个程序很好看,LED1闪十次LED2、LED3、LED4亮一次


#include <stdio.h>
/*---------------------------------------------------------------------------------------------------------*/
/*  Include hear file                                                                       */
/*---------------------------------------------------------------------------------------------------------*/
#include "NUC1xx.h"
/*----------------------------------------------------------------------------
  Define variable
  ----------------------------------------------------------------------------*/
static uint32_t WDTCOUN=0;
/*----------------------------------------------------------------------------
  Function subroutine
  ----------------------------------------------------------------------------*/
void Delay(uint32_t delayCnt)
{
    while(delayCnt--)
    {
        __NOP();
        __NOP();
    }
}
/*----------------------------------------------------------------------------
  Interrupt subroutine
  ----------------------------------------------------------------------------*/
void WDT_IRQHandler(void) // Timer0 interrupt subroutine
{
UNLOCKREG();
  WDT->WTCR.WTIF =1;
WDTCOUN++;

if (WDTCOUN<10) WDT->WTCR.WTR=1; //Wait 10 times
LOCKREG();
GPIOA->DOUT = 0x00; //Toggle GPIOA_0
Delay(10000);
GPIOA->DOUT = 0x04;   
}
/*----------------------------------------------------------------------------
  MAIN function
  ----------------------------------------------------------------------------*/
int32_t main (void)
{

GPIOA->PMD.PMD2=1;
Delay(1000);
  
  
NVIC_DisableIRQ(WDT_IRQn); //Disable WDT interrupt
outpw(&WDT->WTCR ,0 );  //Disable WDT
                              
UNLOCKREG();  
/* Step 1. Enable and Select WDT clock source */         
SYSCLK->CLKSEL1.WDT_S =3; //Select 10Khz for WDT clock source
SYSCLK->APBCLK.WDT_EN =1; //Enable WDT clock source
/* Step 2. Select Timeout Interval */

WDT->WTCR.WTIS=4;   //Select level 3 (11-bit mode)
  
/* Step 3. Enable Watchdog Timer Reset function */
WDT->WTCR.WTRE = 1;

/* Step 4. Enable WDT interrupt */
WDT->WTCR.WTIF =1;  //Write 1 to clear for safty
WDT->WTCR.WTIE = 1;
NVIC_EnableIRQ(WDT_IRQn); //Enable WDT Interrupt

/* Step 5. Enable WDT module */
WDT->WTCR.WTE = 1;  //Enable WDT
LOCKREG();
while(1);
}



NUC testWDT.rar (1.52 MB)

相关帖子

沙发
athud| | 2012-1-4 16:06 | 只看该作者
可惜不是用库的.正在学这个

使用特权

评论回复
板凳
athud| | 2012-1-4 19:02 | 只看该作者
下午一直在研究看门狗,也是第一次使用看门狗,听说对系统稳定性很有帮助.所以只能硬着头皮看了.有了ddllxxrr的笔记帮助,在对照编程手册,每个寄存器的作用下.终于明白了,看门狗的使用.谢谢这位老师.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6956

帖子

67

粉丝