打印
[牛人杂谈]

N79E715的看门狗

[复制链接]
1001|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
N79E715系列提供一组看门狗定时器,用于监测系统以提高系统可靠性。对于容易受到噪声,电源干扰
或静电放电干扰的系统,是十分有用的工具。看门狗定时器周期中断,也可以作为事件定时或在一个周
期监测制度,用于空闲模式或掉电模式下运行时长系统监控。定时器基于一组分频器,对系统时钟频率
进行分割。分频器输出可选,并决定溢出时间。当定时溢出,将会把系统从空闲模式或掉电模式下唤
醒,并产生中断。如果看门狗定时器复位使能,在一个延迟周期后没有软件响应,系统将复位。

沙发
稳稳の幸福|  楼主 | 2017-2-15 21:40 | 只看该作者

使用特权

评论回复
板凳
稳稳の幸福|  楼主 | 2017-2-15 21:41 | 只看该作者
看门狗定时器 通过设定WDCLR(WDCON.6) 从00H开始执行,保证看门狗为已知的状态。通过清除
WDTEN (WDCON.7)关闭看门狗后,该计数器同时清零。 WDCLR 用于复位看门狗定时器,该位自动
清除。 WDCLR 置 1看门狗定时器计数清零。WDTEN置1,看门狗定时器开始计数。 通过设定
WPS2、WPS1和WPS0 (WDCON[2:0]) 选择定时器溢出时间,一旦选择时间溢出,看门狗定时器中断
标志WDTF (WDCON0.5)置1。看门狗中断使能在寄存器EIE.4里设置,写1到EWRST (WDCON1.0)使
能看门狗定时器复位,如果同时设置WDCLR,设定的看门狗定时时间加上基于内部低速RC时钟的额外
512个时钟延迟后复位发生,如果没有设置WDCLR,在512个时钟周期之内发生复位。一旦看门狗定时
器复位发生,看门狗定时复位标志WDTRF (WDCON0.3)将被置1,该位只有在上电复位后才可硬件清
零,用户可以通过软件清WDTRF,看门狗定时器提供WIDPD (WDCON.4)位允许看门狗定时器在系统
进入空闲模式或掉电模式后继续运行。

使用特权

评论回复
地板
稳稳の幸福|  楼主 | 2017-2-15 21:42 | 只看该作者
WDT计数器需特别注意. 在进入和唤醒空闲模式或掉电模式 硬件会自动清 WDT 计数器,防止系统未知
的复位。

使用特权

评论回复
5
稳稳の幸福|  楼主 | 2017-2-15 21:43 | 只看该作者
看门狗定时器复位的主要应用是系统监测, 这对于实时控制很重要,适用于电磁干扰等避免发生程序跑飞等场合,或在未知状态发生时保护用户的代码。 使用看门狗定时器 用户可选择理想的看门狗复位看门狗定时时间。设定 WCLR, 可使代码继续运行而无看门狗定时器复位。若未开启看门狗定时器复位,一旦代码运行在错误的状态下,无法清看门狗定时器,将引起芯片复位。WDCON 有时序写入保护功能,避免误改写。

使用特权

评论回复
6
稳稳の幸福|  楼主 | 2017-2-15 21:44 | 只看该作者
看门狗定时器中断应用
看门狗定时器的另一个应用是用作简单的定时器。 看门狗定时器完成所选的时间间隔后,WDTF标志置
位. 软件让WDTF标志检测定时溢出,WDCLR允许软件重启定时器. 看门狗定时器可被用作较长的定时
器. 任何定时溢出发生时,在EWDT (EIE.4)和EA置1打开的条件下将发生中断。在一些功耗的应用中,CPU常在没有处理事件时处于空闲模式或掉电模式,需要定时唤醒察看是否需要响应,而定时器0、1和2打开后耗电量将达到mA级,无法达到系统需要保持在μA级的要求。N79E715看门狗定时器可以起到定时唤醒的功能,由于基于内部10kHz的RC时钟源,看门狗定时器功耗非常低,更是用于需要低功耗的场合。

使用特权

评论回复
7
稳稳の幸福|  楼主 | 2017-2-15 21:46 | 只看该作者
看门狗定时器在掉电模式下应用的例程
ORG 0000H
LJMP START
ORG 0053H
LJMP WDT_ISR
ORG 0100H
WDT_ISR:
CLR EA
MOV TA,#0AAH
MOV TA,#55H
ORL WDCON0,#01000000B ;clear Watchdog Timer counter
INC ACC
MOV P0,ACC
SETB EA
CLR EA
MOV TA,#0AAH
MOV TA,#55H
ANL WDCON0,#11011111B ;clear Watchdog Timer interrupt flag
SETB EA
RETI
START:
MOV TA,#0AAH
MOV TA,#55H
ORL WDCON0,#01000000B ;clear Watchdog Timer counter
MOV TA,#0AAH
MOV TA,#55H
ORL WDCON0,#10000000B ;enable Watchdog Timer to run
Check_clear:
MOV A,WDCON0
JB ACC.6,Check_clear
MOV TA,#0AAH
MOV TA,#55H
ORL WDCON0,#00000111B ;choose interval length
MOV TA,#0AAH
MOV TA,#55H
ANL WDCON1,#11111110B ;disable Watchdog Timer reset
SETB EWDI ;enable Watchdog Timer interrupt
MOV TA,#0AAH
MOV TA,#55H
SETB WIDPD
SETB EA
;********************************************************************
;Enter into Power Down mode
;********************************************************************
LOOP:
ORL PCON,#02H
LJMP LOOP
END

使用特权

评论回复
8
稳稳の幸福|  楼主 | 2017-2-15 21:48 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************
//  Application: WDT Function
//  Set watch counter and enable WDT interrupt. WDT ISR will be execute when WDT time out.
//
//  Output : P1.4 & P2.1 toggle by WDT interrupt
//***********************************************************************************************************

//========================================= How to set WDT register =========================================
//
//  1.WDT time-out period is 64 /(Fwck + Prescalar);
//
//  2.Fwck is frequency of WDT clock source
//
//  3.Prescalar = WDCON0 & 0x07
//===========================================================================================================

//------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
//
//<o0.0..2> WDT Prescalar Select
//      <0=> 1/1    <1=> 1/2    <2=> 1/8    <3=> 1/16
//      <4=> 1/32   <5=> 1/64   <6=> 1/128  <7=> 1/256
//     <o1.6> UART pin Select
//         <0=> Select P1.0, P1.1 as UART pin            <1=> Select P2.6, P2.7 as UART pin(28 pin only)
//-------------------------------- <<< end of configuration section >>> -------------------------------------

#define WDT_CLK_DIV     0x01
#define Uart_Port_Sel   0x00

#include <stdio.h>
#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "WDT.h"
#include "Version.h"
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void main(void)
{
    AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
    InitialUART0_Timer1(9600);          // 9600 Baud Rate [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz
    Show_Version_Number_To_PC();
    printf ("\n*===================================================================");
    printf ("\n*  Name: N79E715 Series WDT Sample Code.");
    printf ("\n*===================================================================");
    printf ("\nWDT Demo Start.");
    printf ("\nP1.4 & P2.1 toggle by polling.\n");

    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    WDCON0 &= 0xf8;
    TA = 0xAA;
    TA = 0x55;
    WDCON0 |= WDT_CLK_DIV;              // Select bit length of WDT counter
    EA = EA_Save_bit;

    set_WDCLR;                          // Clear WDT counter
    clr_WDTF;
    set_WDTEN;                          // Enable WDT
    EWDI = 1;                           // Enable WDT interrupt
    EA = 1;                             // Enable interrupt
    while(1);
}
//-----------------------------------------------------------------------------------------------------------
void WDT_ISR(void)  interrupt 10        // Vector @  0x53
{
    clr_WDTF;                           // Clear WDT flag
    P14 = ~P14;                         // P1.4 toggle when interrupt
    P21 = ~P21;                         // P2.1 toggle when interrupt
}
//-----------------------------------------------------------------------------------------------------------

使用特权

评论回复
9
天灵灵地灵灵| | 2017-2-16 19:17 | 只看该作者
看门狗定时器周期中断,也可以作为事件定时或在一个周期监测制度,用于空闲模式或掉电模式下运行时长系统监控。

使用特权

评论回复
10
zhuotuzi| | 2017-2-17 08:39 | 只看该作者
当定时溢出,将会把系统从空闲模式或掉电模式下唤醒,并产生中断。

使用特权

评论回复
11
598330983| | 2017-2-19 19:28 | 只看该作者
通过看门狗可以很容易的保证系统在死机后能快速复位,恢复应用。

使用特权

评论回复
12
heisexingqisi| | 2017-2-19 23:15 | 只看该作者
对于那些开机后什么不设置就可以正常运行的系统,弄这个看门狗最合适了。

使用特权

评论回复
13
gejigeji521| | 2017-2-20 00:04 | 只看该作者
定时器基于一组分频器,对系统时钟频率进行分割。分频后可以提供不同速率的时钟信号给不同的外设。

使用特权

评论回复
14
yiyigirl2014| | 2017-2-20 00:11 | 只看该作者
如果看门狗定时器复位使能,在一个延迟周期后没有软件响应,系统将复位。复位后系统哈可以重头开始运行。

使用特权

评论回复
15
天灵灵地灵灵| | 2017-2-20 00:20 | 只看该作者
定时溢出,将会把系统从空闲模式或掉电模式下唤醒,并产生中断。

使用特权

评论回复
16
稳稳の幸福|  楼主 | 2017-2-20 00:20 | 只看该作者
看门狗定时器周期中断,也可以作为事件定时或在一个周期监测制度,用于空闲模式或掉电模式下运行时长系统监控。

使用特权

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

本版积分规则

181

主题

3246

帖子

8

粉丝