打印
[技术问答]

N79E814A系列掉电**程序

[复制链接]
1086|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zloyqd|  楼主 | 2016-12-27 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N79E814A系列掉电记忆程序   是怎么写的。好像资料写的不是很清楚。
沙发
yiyigirl2014| | 2016-12-27 20:15 | 只看该作者
是真的掉电还是主动掉电啊,如果是那种断电的话,是没法**的,如果是主动掉电,那是先保存数据,然后软件掉电,就是相当于关机。

使用特权

评论回复
板凳
wahahaheihei| | 2016-12-27 23:48 | 只看该作者
需要搞个备用电源吧。

使用特权

评论回复
地板
zloyqd|  楼主 | 2016-12-28 10:40 | 只看该作者
N79E814A 的数据存储器空间固定为4K 地址为3000H 到3FFFH     就是这段空间是使用。

使用特权

评论回复
5
huangcunxiake| | 2016-12-28 20:56 | 只看该作者
zloyqd 发表于 2016-12-28 10:40
N79E814A 的数据存储器空间固定为4K 地址为3000H 到3FFFH     就是这段空间是使用。 ...

就是如何检测掉电的问题,写这个空间应该直接通过指针就可以,*p=data;
就这种方式,

使用特权

评论回复
6
643757107| | 2016-12-28 23:54 | 只看该作者
不知道手册里面提到这个怎么写那个区域没。

使用特权

评论回复
7
643757107| | 2016-12-28 23:54 | 只看该作者
以前用STC89C52,就有那个例程讲解怎么用,直接调用那个头文件就行

使用特权

评论回复
8
wahahaheihei| | 2016-12-29 23:40 | 只看该作者
这个是吗?
去官方网站下例程的
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************
//  Application: LDROM program Data Flash Function
//  ISP_LD.bin need to program to LD
//  Config0 bit7(CBS)  need to select LDROM
//
//  Output : Test OK                  =>  P0 = 0
//           Erase Data Verify err    =>  P0 = ~0xA1
//           Program Data Verify err  =>  P0 = ~0xA2
//
//  Because ICE bridge can't update LDROM, Please using ICP/HW writer to update LDROM.
//***********************************************************************************************************

//------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
// <h> UART pin Select
//     <o0.6> UART pin
//          <0=> Select P1.0, P1.1 as UART pin(default)
//          <1=> Select P2.6, P2.7 as UART pin(28 pin only)
// </h>
//-------------------------------- <<< end of configuration section >>> -------------------------------------

#define Uart_Port_Sel   0x00

#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "Version.h"

#include <intrins.h>
#include <stdio.h>
#include <string.h>

#define   ERASE_ALL_DATA        0x22
#define   FLASH_READ_DATA       0x00
#define   BYTE_PROGRAM_DATA     0x21

#define   ERASE_ALL_CONFIG      0xE2
#define   FLASH_READ_CONFIG     0xC0
#define   BYTE_PROGRAM_CONFIG   0xE1
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void Clear_BOF(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    PMCR &= CLR_BIT3;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Enable_ISP_Mode(void)
{
    /* Enable ISP  */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Disable_ISP_Mode(void)
{
    /* Disable ISP */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON &= 0xFE;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_ISP(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    ISPTRG |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x01;
    ISPCN = ERASE_ALL_DATA;

    for(u16Count=96;u16Count<128;u16Count++)
    {
        ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
        ISPAH = HIBYTE(u16Count*128);               // 96*128=12288=0x3000
        Trigger_ISP();
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA_Verify(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x02;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD = 0;
        Trigger_ISP();

        if(ISPFD != 0xFF)
        {
            printf ("\nEV err.");
            P0 = ~0xA1;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x03;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPFD = 0xFF;
    ISPCN = BYTE_PROGRAM_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD++;
        Trigger_ISP();

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA_Verify(void)
{
    UINT16 u16Count;
    UINT8  u8Read_Data;

    Enable_ISP_Mode();
    P0 = ~0x04;
    ISPAL = 0x00;
    ISPAH = 0x30;
    u8Read_Data = 0x00;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        Trigger_ISP();
        if(ISPFD != u8Read_Data)
        {
            printf ("\nPV err.");
            P0 = ~0xA2;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
            u8Read_Data++;
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_CONFIG(void)
{
    BIT    EA_TMP;

    EA_TMP = EA;
    EA = 0;
    Enable_ISP_Mode();
    P0 = ~0x05;
    ISPCN = ERASE_ALL_CONFIG;
    ISPAL = 0x00;
    ISPAH = 0x00;
    Trigger_ISP();
    Disable_ISP_Mode();
    EA = EA_TMP;
}

//-----------------------------------------------------------------------------------------------------------
void Program_CONFIG(UINT8 u8CONFIG_NUMBER,UINT8 u8Value)
{
    BIT    EA_TMP;

    EA_TMP = EA;
    EA = 0;
    Enable_ISP_Mode();
    P0 = ~0x06;
    ISPAL = u8CONFIG_NUMBER;
    ISPAH = 0x00;
    ISPFD = u8Value;
    ISPCN = BYTE_PROGRAM_CONFIG;
    Trigger_ISP();
    Disable_ISP_Mode();
    EA = EA_TMP;
}
//-----------------------------------------------------------------------------------------------------------
UINT8 Read_CONFIG(UINT8 u8CONFIG_NUMBER)
{
    UINT8  u8Read_Data;

    Enable_ISP_Mode();
    P0 = ~0x07;
    ISPAL = u8CONFIG_NUMBER;
    ISPAH = 0x00;
    u8Read_Data = 0x00;
    ISPCN = FLASH_READ_CONFIG;
    Trigger_ISP();
    u8Read_Data = ISPFD;
    Disable_ISP_Mode();
    return u8Read_Data;
}
//-----------------------------------------------------------------------------------------------------------
void main (void)
{


    Clear_BOF();

    InitialUART0_Timer1(9600);                      // 9600 Baud Rate [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz
    printf ("\n N79E715 ISP LDROM Program Data Flash Sample Code.");

    Erase_DATA();
    Erase_DATA_Verify();
    Program_DATA();
    Program_DATA_Verify();

    printf ("\nN79E715 ISP LDROM Program Data Flash OK!\n");
    P14 = 0;
    P21 = 0;
    while(1);
}
//-----------------------------------------------------------------------------------------------------------


使用特权

评论回复
9
wahahaheihei| | 2016-12-29 23:40 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************
//  Application: APROM program Data Flash Function
//  ISP_AP.bin need to program to APROM
//  Config0 bit0(DFEN) =0 (enable DFEN)
//  Config1(CHBDA)=0x30
//  Output : Test OK                  =>  P0 = 0
//           Erase Data Verify err    =>  P0 = ~0xA1
//           Program Data Verify err  =>  P0 = ~0xA2
//***********************************************************************************************************

//------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
// <h> UART pin Select
//     <o0.6> UART pin
//          <0=> Select P1.0, P1.1 as UART pin(default)
//          <1=> Select P2.6, P2.7 as UART pin(28 pin only)
// </h>
//-------------------------------- <<< end of configuration section >>> -------------------------------------

#define Uart_Port_Sel   0x00

#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "Version.h"

#include <intrins.h>
#include <stdio.h>
#include <string.h>

#define   ERASE_ALL_DATA        0x22
#define   FLASH_READ_DATA       0x00
#define   BYTE_PROGRAM_DATA     0x21

#define   ERASE_ALL_CONFIG      0xE2
#define   FLASH_READ_CONFIG     0xC0
#define   BYTE_PROGRAM_CONFIG   0xE1
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void Clear_BOF(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    PMCR &= CLR_BIT3;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Enable_ISP_Mode(void)
{
    /* Enable ISP  */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Disable_ISP_Mode(void)
{
    /* Disable ISP */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON &= 0xFE;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_ISP(void)
{
    EA_Save_bit = EA;
    EA = 0;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    ISPTRG |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x01;
    ISPCN = ERASE_ALL_DATA;

    for(u16Count=96;u16Count<128;u16Count++)
    {
        ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
        ISPAH = HIBYTE(u16Count*128);               // 96*128=12288=0x3000
        Trigger_ISP();
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA_Verify(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x02;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD = 0;
        Trigger_ISP();

        if(ISPFD != 0xFF)
        {
            printf ("\nEV err.");
            P0 = ~0xA1;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x03;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPFD = 0xFF;
    ISPCN = BYTE_PROGRAM_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD++;
        Trigger_ISP();

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA_Verify(void)
{
    UINT16 u16Count;
    UINT8  u8Read_Data;

    Enable_ISP_Mode();
    P0 = ~0x04;
    ISPAL = 0x00;
    ISPAH = 0x30;
    u8Read_Data = 0x00;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        Trigger_ISP();
        if(ISPFD != u8Read_Data)
        {
            printf ("\nPV err.");
            P0 = ~0xA2;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
            u8Read_Data++;
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void main (void)
{

    Clear_BOF();
    AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
    InitialUART0_Timer1(9600);          // 9600 Baud Rate @ 11.0592MHz
    Show_Version_Number_To_PC();
    printf ("\n N79E84x ISP APROM Program Data Flash Sample Code.");

    Erase_DATA();
    Erase_DATA_Verify();
    Program_DATA();
    Program_DATA_Verify();

    printf ("\n N79E715 ISP APROM Program Data Flash OK!\n");

    P14 = 0;
    P21 = 0;
    while(1);
}
//-----------------------------------------------------------------------------------------------------------


使用特权

评论回复
10
nobleliom| | 2016-12-30 19:54 | 只看该作者
内部有eeprom才可以掉电保存的,无eeprom就不可以

使用特权

评论回复
11
zloyqd|  楼主 | 2017-1-9 19:51 | 只看该作者

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝