[DemoCode下载]

看门狗复位

[复制链接]
808|6
手机看帖
扫描二维码
随时随地手机跟帖
gejigeji521|  楼主 | 2019-6-30 22:59 | 显示全部楼层 |阅读模式
本帖最后由 gejigeji521 于 2019-6-30 23:00 编辑
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2017
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 Watch Dog as pure timer with interrupt demo code
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"


/************************************************************************************************************
*    WDT interrupt sub-routine
************************************************************************************************************/
void WDT_ISR (void)   interrupt 10
{

                                        //---------toggle GPIO1---------        
                                                clr_GPIO1;
                                                Timer2_Delay500us(5);
                                                set_GPIO1;
                                                Timer2_Delay500us(5);
                                                clr_GPIO1;
                                                Timer2_Delay500us(5);
                                                set_GPIO1;
                                                Timer2_Delay500us(5);
                                        //---------end toggle GPIO2--------
                clr_WDTF;
                set_WDCLR;
}

/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main (void)
{
/* Note
  WDT timer base is LIRC 10Khz
*/
   
  Set_All_GPIO_Quasi_Mode;
        
                                                clr_GPIO1;
                                                Timer0_Delay1ms(500);
                                                set_GPIO1;
                                                Timer0_Delay1ms(500);
                                                clr_GPIO1;
                                                Timer0_Delay1ms(500);
                                                set_GPIO1;
                                                Timer0_Delay1ms(500);
        
//WDT init
//--------------------------------------------------------
//Warning:
//Pleaes always check CONFIG WDT disable first
//only when WDT reset disable, WDT use as pure timer
//--------------------------------------------------------
          TA=0xAA;TA=0x55;WDCON=0x07;                  //Setting WDT prescale
                set_WDTR;                       //WDT run
                set_WDCLR;                                                                                        //Clear WDT timer
                set_EWDT;
                EA =1;

#if 0
    while(1);
#else
                set_WIDPD;                                                                                         //WDT run in POWER DOWM mode setting if needed
                while (1)
                {
                        set_PD;
                                        //---------toggle GPIO1---------        
                                                clr_P04;
                                                Timer1_Delay10ms(5);
                                                set_P04;
                                                Timer1_Delay10ms(5);
                                                clr_P04;
                                                Timer1_Delay10ms(5);
                                                set_P04;
                                                Timer1_Delay10ms(5);
                                        //---------end toggle GPIO1---------
                }
#endif
}


使用特权

评论回复
gejigeji521|  楼主 | 2019-6-30 22:59 | 显示全部楼层
发现BSP里面有两个例子,一个名字是看门狗定时器中断,一个是看门狗中断。

使用特权

评论回复
gejigeji521|  楼主 | 2019-6-30 23:01 | 显示全部楼层
本来是要上面的问题的,我又仔细看了一下, 是我看错了。。。
不过不删帖了,讨论一下看门狗复位
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : May/02/2018
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 Watch Dog reste functiondemo code
//***********************************************************************************************************

#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

/***********************************************************************
        WDT CONFIG enable
        warning : this macro is only when ICP not enable CONFIG WDT function
        copy this marco code to you code to enable WDT reset.
************************************************************************/
void Check_WDT_Reset_Config(void)
{
                set_IAPEN;
                IAPAL = 0x04;
                IAPAH = 0x00;       
                IAPFD = 0xFF;
                IAPCN = 0xC0;                                                //Read config command
                set_IAPGO;  
                if ((IAPFD&0xF0)==0xF0)
                {
                                IAPFD = 0x0F;
                                IAPCN = 0xE1;
        set_IAPGO;                                                                         //trigger IAP
                                while((CHPCON&SET_BIT6)==SET_BIT6);          //check IAPFF (CHPCON.6)
                                clr_CFUEN;
                                clr_IAPEN;
                                EA = 0;
                                TA = 0xAA;
                                TA = 0x55;
                                CHPCON &= 0xFD;
                                TA = 0xAA;
                                TA = 0x55;
                                CHPCON |= 0x80;
                }
                clr_IAPEN;
}


/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main (void)
{

  Set_All_GPIO_Quasi_Mode;
//        CKDIV = 0X01;
        clr_GPIO1;
//        Timer0_Delay1ms(1);                                        //toggle I/O to show MCU Reset
        set_GPIO1;

       
//----------------------------------------------------------------------------------------------
// WDT Init !!! ENABLE CONFIG WDT FIRST !!!
// Warning:
// Always check CONFIG WDT enable first, CONFIG not enable, SFR can't enable WDT reset
// Please call Enable_WDT_Reset_Config() function to enable CONFIG WDT reset
//----------------------------------------------------------------------------------------------
                Check_WDT_Reset_Config();
       
          TA=0xAA;TA=0x55;WDCON|=0x07;                                                //Setting WDT prescale
                set_WDCLR;                                                                                                                //Clear WDT timer
                while((WDCON|~SET_BIT6)==0xFF);                                //confirm WDT clear is ok before into power down mode
//                EA = 1;
                set_WDTR;                                                                                                                        //WDT run
//               
    while(1)
                {
                        clr_P05;
                        Timer0_Delay1ms(1);
                        set_P05;
                        Timer0_Delay1ms(1);
                        clr_P05;
                        Timer0_Delay1ms(1);
                        set_P05;
                        Timer0_Delay1ms(1);
                        clr_P05;
                        set_PD;
                }
}

使用特权

评论回复
zhuomuniao110| | 2019-7-22 13:31 | 显示全部楼层
看门狗复位,是超时吗

使用特权

评论回复
zhuomuniao110| | 2019-7-22 13:33 | 显示全部楼层
看门狗定时器也可以独立用

使用特权

评论回复
xuanhuanzi| | 2019-7-23 11:33 | 显示全部楼层
确实可以,跑一个试试

使用特权

评论回复
xinxianshi| | 2019-7-23 21:56 | 显示全部楼层
比较好用。

使用特权

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

本版积分规则

161

主题

2117

帖子

8

粉丝