打印
[技术问答]

N76E003 如何开辟一块区域用作于EEPROM,在烧录的时候不被擦除

[复制链接]
1694|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
淡然的烟|  楼主 | 2018-7-20 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新唐的N76E003如何开辟一块区域,用作保存数据在烧录的时候不会被擦除。第一次烧录的时候添加进内容,第二次烧录的时候不会被擦除掉。继续保存? 看手册LDROM貌似可以使用,但是我配置了LDROM,依旧在第二次烧录的时候被擦除为0xFF了 有大神指点一下么
沙发
09kk小熊| | 2018-7-20 16:59 | 只看该作者
你烧录的时候不要去勾选LDROM就不会去操作了。还有你得先划分LDROM空间

使用特权

评论回复
板凳
huangcunxiake| | 2018-7-20 21:58 | 只看该作者
09kk小熊 发表于 2018-7-20 16:59
你烧录的时候不要去勾选LDROM就不会去操作了。还有你得先划分LDROM空间

楼上正解,你最好先看看官方的手册和BSP例子。看看这些怎么实现。

使用特权

评论回复
地板
zhuotuzi| | 2018-7-20 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   : Apr/21/2016
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 APROM program DATAFLASH as EEPROM way
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

#define ADDR_BASE 0x4700

#define FLASH_L_LOW                        ADDR_BASE+1
#define FLASH_L_HIGH                ADDR_BASE+2
#define FLASH_H_LOW                        ADDR_BASE+3
#define FLASH_H_HIGH                ADDR_BASE+4
/*****************************************************************************************************************
write_DATAFLASH_BYTE :
user can copy all this subroutine into project, then call this function in main.
******************************************************************************************************************/               
void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
{
        UINT8 looptmp=0,u8_addrl_r;
        unsigned char code *cd_longaddr;
        unsigned char xdata *xd_tmp;
       
//Check page start address
        u8_addrl_r = u16_addr;
        if (u8_addrl_r<0x80)
        {
                u8_addrl_r = 0;
        }
        else
        {
                u8_addrl_r = 0x80;
        }
//Save APROM data to XRAM
        xd_tmp = 0x280;
        cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;       
        while (xd_tmp !=0x300)
        {
                *xd_tmp = *cd_longaddr;
                looptmp++;
                xd_tmp++;
                cd_longaddr++;
        }
// Modify customer data in XRAM
        u8_addrl_r = u16_addr;
        if (u8_addrl_r<0x80)
        {
                xd_tmp = u8_addrl_r+0x280;
        }
        else
        {
                xd_tmp = u8_addrl_r+0x200;
        }
        *xd_tmp = u8_data;
//Erase APROM DATAFLASH page
                IAPAL = u16_addr;
                IAPAH = u16_addr>>8;
                IAPFD = 0xFF;
          set_IAPEN;
                set_APUEN;
    IAPCN = 0x22;                
                set_IAPGO;
//Save changed RAM data to APROM DATAFLASH
        u8_addrl_r = u16_addr;
        if (u8_addrl_r<0x80)
        {
                u8_addrl_r =0;
        }
        else
        {
                u8_addrl_r = 0x80;
        }
                xd_tmp = 0x280;
          IAPAL = u8_addrl_r;
    IAPAH = u16_addr>>8;
                set_IAPEN;
                set_APUEN;
          IAPCN = 0x21;
                while (xd_tmp !=0x2FF)
                {
                        IAPFD = *xd_tmp;
                        set_IAPGO;
                        IAPAL++;
                        xd_tmp++;
                }
                clr_APUEN;
                clr_IAPEN;
}       
       
//-------------------------------------------------------------------------
UINT8 read_APROM_BYTE(UINT16 code *u16_addr)
{
        UINT8 rdata;
        rdata = *u16_addr>>8;
        return rdata;
}

/******************************************************************************************************************/       


void main (void)
{
                UINT8 datatemp;
                UINT16 system16highsite;
/* -------------------------------------------------------------------------*/
/*  Dataflash use APROM area, please ALWAYS care the address of you code    */
/*        APROM 0x3800~0x38FF demo as dataflash                                                                                                     */
/*         Please use Memory window key in C:0x3800 to check earse result                                        */             
/* -------------------------------------------------------------------------*/
                InitialUART0_Timer1(115200);
//call write byte
                write_DATAFLASH_BYTE (0x3802,0x34);
                write_DATAFLASH_BYTE (FLASH_L_LOW,0x55);
                write_DATAFLASH_BYTE (FLASH_L_HIGH,0x56);
                write_DATAFLASH_BYTE (FLASH_H_LOW,0xaa);
                write_DATAFLASH_BYTE (FLASH_H_HIGH,0x66);
//call read byte
                datatemp = read_APROM_BYTE(0x3802);
                system16highsite = ((read_APROM_BYTE(FLASH_H_HIGH)<<8)+read_APROM_BYTE(FLASH_H_LOW));

    while(1)
                {
//                                printf ("\n data temp = 0x%bx", datatemp);
                }
}
//-----------------------------------------------------------------------------------------------------------

使用特权

评论回复
5
zhuotuzi| | 2018-7-20 23:02 | 只看该作者
参考这个例子试试,你把写入那个通过安检控制。可以读取,你先写入,然后第二次读出看看能否保持之前写的内容。

使用特权

评论回复
6
734774645| | 2018-7-21 21:37 | 只看该作者
去新唐官方找PDF文档,有一个介绍这个的

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝