打印
[技术问答]

关于N76E003的WDT问题

[复制链接]
4844|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
目前可以用WDT实现超时复位功能,但在使用它的通用定时器功能不成功,个人感觉这两个功能的切换就是对CONFIG4这个寄存器进行配置,通用定时器配置如下:
static void CONFIG4_Config(UINT8 u8_data)
{
    IAPAL = 0x04;
    IAPAH = 0x00;
    set_IAPEN;
    set_CFUEN;
    CONFIG_BYTE_WRITE;
    IAPFD = u8_data;
    set_IAPGO;
    while((CHPCON&SET_BIT6)==SET_BIT6);
    clr_CFUEN;
    clr_IAPEN;
}
void WatchDog_Init(void)
{
        clr_WDTRF;
        CONFIG4_Config(0xaf);
        TA=0xAA;
        TA=0x55;
        WDCON=0x07;
        set_WDCLR;        //Clear WDT timer
        while((WDCON|~SET_BIT6)==0xFF);        //confirm WDT clear is ok before into power down mode
        set_WDTR;                //WDT run
#if 1
        set_EWDT;  
#endif
}
不知道问题出在哪里,配置不成功,一直是超时复位功能,请大神们指点一下,不胜感激!!!
沙发
一株蒜|  楼主 | 2017-7-3 15:54 | 只看该作者
发帖的时候CONFIG4_Config(0xaf);写错了,应该是CONFIG4_Config(0xff);,可是配置成0xff也用不了普通定时功能

使用特权

评论回复
板凳
598330983| | 2017-7-3 18:08 | 只看该作者
芯片不是有定时器吗,这个看门狗定时器,一般就是用于超时复位啊。

使用特权

评论回复
地板
玛尼玛尼哄| | 2017-7-5 18:29 | 只看该作者
没试过这个用法。如果是普通定时器,就不是WDT了。

使用特权

评论回复
5
玛尼玛尼哄| | 2017-7-5 18:32 | 只看该作者
不过确实这个芯片功能强大,支持这个功能。

不过官方提供的有汇编代码,可以根据这个汇编的操作,写C语言的。

使用特权

评论回复
6
玛尼玛尼哄| | 2017-7-5 18:34 | 只看该作者
(CONFIG4[7:4]) 是 FH
而 CONFIG4_Config(0xaf);
这个是全部的config4吧?人家的意思是高4位是高电平啊。。你的这个配置显然不对啊。

使用特权

评论回复
7
玛尼玛尼哄| | 2017-7-5 18:39 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

//***********************************************************************************************************
//  File Function: N76E003 Watch Dog as pure timer with interrupt demo code
//***********************************************************************************************************

#include <stdio.h>
#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;
                Timer0_Delay1ms(50);
                set_GPIO1;
                Timer0_Delay1ms(50);
                clr_GPIO1;
                Timer0_Delay1ms(50);
                set_GPIO1;
                Timer0_Delay1ms(50);
        //---------end toggle GPIO1--------
                clr_WDTF;
                set_WDCLR;
}

/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main (void)
{
/* Note
  WDT timer base is LIRC 10Khz
*/
   
  Set_All_GPIO_Quasi_Mode;
       
//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=0x06;                  //Setting WDT prescale
                set_WDTR;                       //WDT run
                set_WDCLR;                                                                                        //Clear WDT timer
                set_EWDT;
                EA =1;

#if 1
    while(1);
#else
                set_WIDPD;                                                                                         //WDT run in POWER DOWM mode setting if needed
                while (1)
                {
                        set_PD;
                //---------toggle GPIO1---------       
                        clr_GPIO1;
                        Timer1_Delay1ms(100);
                        set_GPIO1;
                        Timer1_Delay1ms(100);
                        clr_GPIO1;
                        Timer1_Delay1ms(100);
                        set_GPIO1;
                        Timer1_Delay1ms(100);
                //---------end toggle GPIO1---------
                }
#endif
}

使用特权

评论回复
8
玛尼玛尼哄| | 2017-7-5 18:39 | 只看该作者
应该是参考这个例子。这个不是复位系统的。是中断的。

使用特权

评论回复
9
dongnanxibei| | 2017-7-5 22:06 | 只看该作者
学习学习,新唐的WDT真给力。

使用特权

评论回复
10
heisexingqisi| | 2017-7-5 23:06 | 只看该作者
看不懂那个config4函数是怎么实现的。

使用特权

评论回复
11
一株蒜|  楼主 | 2017-7-6 08:56 | 只看该作者
玛尼玛尼哄 发表于 2017-7-5 18:34
(CONFIG4[7:4]) 是 FH
而 CONFIG4_Config(0xaf);
这个是全部的config4吧?人家的意思是高4位是高电平啊。。 ...

这个是我写这个帖子写错了,我代码里是写CONFIG4_Config(0xff);的,没什么作用,不过在keil的 debug里可以设置WDT的功能,不过现在都还做不了软件设置实现。

使用特权

评论回复
12
玛尼玛尼哄| | 2017-7-11 20:38 | 只看该作者
晕死,这个有啥特别的?不会这个芯片也有什么保护吧,不该啊。

使用特权

评论回复
13
15228869197| | 2018-7-2 10:03 | 只看该作者
一株蒜 发表于 2017-7-6 08:56
这个是我写这个帖子写错了,我代码里是写CONFIG4_Config(0xff);的,没什么作用,不过在keil的 debug里可 ...

楼主,问题解决了吗,我也遇到了相同的情况,打开看门狗后,关闭不了了

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝