打印
[DemoCode下载]

003的配置字如何在程序里修改

[复制链接]
576|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
幸福小强|  楼主 | 2019-11-24 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* 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 reste functiondemo code
//***********************************************************************************************************

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

#define     CFG_READ            0xC0
#define     CFG_ERASE           0xE2
#define     CFG_BYTE_PROGRAM    0xE1

/***********************************************************************
        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 Enable_WDT_Reset_Config(void)
{
          set_IAPEN;
    IAPAL = 0x04;
    IAPAH = 0x00;
    IAPFD = 0x0F;
    IAPCN = CFG_BYTE_PROGRAM;
    set_CFUEN;
    set_IAPGO;                                  //trigger IAP
                while((CHPCON&SET_BIT6)==SET_BIT6);          //check IAPFF (CHPCON.6)
    clr_CFUEN;
    clr_IAPEN;
}
/***********************************************************************
        WDT CONFIG disable
        warning : this macro is for CONFIG already enable WDT Reset to disable.
        Since erase CONFIG is full page
        step 1. storage CONFIG value in RAM
        step 2. modify RAM CONFIG4 WDT value to disable
        step 3. erase CONFIG page
        step 4. re writer CONFIG.
************************************************************************/
void Disable_WDT_Reset_Config(void)
{
        UINT8 cf0,cf1,cf2,cf3,cf4;
       
          set_IAPEN;
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPCN = CFG_READ;
    set_IAPGO;                                  //Storage CONFIG0 data
                cf0 = IAPFD;
                IAPAL = 0x01;
                set_IAPGO;                                  //Storage CONFIG1 data
                cf1 = IAPFD;
                IAPAL = 0x02;
          set_IAPGO;                                  //Storage CONFIG2 data
                cf2 = IAPFD;
                IAPAL = 0x03;
          set_IAPGO;                                  //Storage CONFIG3 data
                cf3 = IAPFD;
                IAPAL = 0x04;
          set_IAPGO;                                  //Storage CONFIG4 data
                cf4 = IAPFD;
                cf4 |= 0xF0;                                                                                                                                //Moidfy Storage CONFIG4 data disable WDT reset
               
                set_CFUEN;       
                IAPCN = CFG_ERASE;                                                                                                        //Erase CONFIG all
                IAPAH = 0x00;
                IAPAL = 0x00;
                IAPFD = 0xFF;
                set_IAPGO;
               
                IAPCN = CFG_BYTE_PROGRAM;                                                                                //Write CONFIG
                IAPFD = cf0;
                set_IAPGO;
                IAPAL = 0x01;
                IAPFD = cf1;
                set_IAPGO;
                IAPAL = 0x02;
                IAPFD = cf2;
                set_IAPGO;
                IAPAL = 0x03;
                IAPFD = cf3;
                set_IAPGO;
                IAPAL = 0x04;
                IAPFD = cf4;
                set_IAPGO;

    clr_CFUEN;
    clr_IAPEN;
}

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

  Set_All_GPIO_Quasi_Mode;

        clr_GPIO1;
        Timer0_Delay1ms(50);                                        //toggle I/O to show MCU Reset
        set_GPIO1;
        Timer0_Delay1ms(50);
        clr_GPIO1;
        Timer0_Delay1ms(50);
        set_GPIO1;
        Timer0_Delay1ms(50);

       
//----------------------------------------------------------------------------------------------
// 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
//----------------------------------------------------------------------------------------------

//        Enable_WDT_Reset_Config();                                                        //Software enable WDT reset CONFIG setting
          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
                Disable_WDT_Reset_Config();                                                //Software disable WDT reset CONFIG setting

    while (1)
                {
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);
                        clr_GPIO1;
                        set_PD;
                }
}



使用特权

评论回复
沙发
幸福小强|  楼主 | 2019-11-24 21:57 | 只看该作者
使用IAP命令修改配置WDT复位设置,禁用WDT复位功能。一旦WDT复位设置启用配置,只有这样才能禁用它。

使用特权

评论回复
板凳
幸福小强|  楼主 | 2019-11-24 21:57 | 只看该作者

这个方法是不是很6,之前好多人想知道怎么在程序里设置配置字。

使用特权

评论回复
地板
598330983| | 2019-11-24 22:04 | 只看该作者
原来如此,看懂了。

使用特权

评论回复
5
manufact| | 2019-11-25 16:45 | 只看该作者
还可以这么搞?

使用特权

评论回复
6
tianxj01| | 2019-11-26 09:11 | 只看该作者
幸福小强 发表于 2019-11-24 21:57
这个方法是不是很6,之前好多人想知道怎么在程序里设置配置字。

其实,我们在类似像NULINK上面修改配置字,NULINK就是通过IAP命令来修改这些地方的。
NULINK上面只是把这些变成传统的人机界面供人选择了,所以,在程序运行时候,动配置字当然也是完全可以的。

使用特权

评论回复
7
dongnanxibei| | 2019-11-27 07:10 | 只看该作者
原来如此原来如此。

使用特权

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

本版积分规则

124

主题

1543

帖子

2

粉丝