[技术问答]

N76E003掉电数据保存

[复制链接]
3152|13
手机看帖
扫描二维码
随时随地手机跟帖
卧龙小子|  楼主 | 2017-12-25 17:51 | 显示全部楼层 |阅读模式
[url]看到官方例子,直接拿来用,但是调用写入数据函数用不了,而且原来其他功能也不正常了,单独放一条读的函数,其他功能也正常。有谁用过可以解释一下吗?
稳稳の幸福| | 2017-12-25 17:54 | 显示全部楼层
原封不动的用官方例子都不好使?

使用特权

评论回复
卧龙小子|  楼主 | 2017-12-25 17:54 | 显示全部楼层
如图,IAP_Dataflash_EEPROM官方例程
1.png
2.png

使用特权

评论回复
稳稳の幸福| | 2017-12-25 17:54 | 显示全部楼层
是不是要有配置字设置?

使用特权

评论回复
稳稳の幸福| | 2017-12-25 17:54 | 显示全部楼层
在烧录的时候有配置字4个设置,不知道跟这个有关没。

使用特权

评论回复
卧龙小子|  楼主 | 2017-12-25 18:00 | 显示全部楼层
稳稳の幸福 发表于 2017-12-25 17:54
原封不动的用官方例子都不好使?

按道理来说,程序应该不会占用这片空间吧,不然其他功能不会出错啊,我就随便写一个数到地址然后一开机读取那个数,写入放到主循环里

使用特权

评论回复
捉虫天师| | 2017-12-25 20:49 | 显示全部楼层
卧龙小子 发表于 2017-12-25 18: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 APROM program DATAFLASH as EEPROM way
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"


/*****************************************************************************************************************
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 = 0x80;
        cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;       
        while (xd_tmp !=0x100)
        {
                *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+0x80;
        }
        else
        {
                xd_tmp = u8_addrl_r+0;
        }
        *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 !=0xFF)
                {
                        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;
/* -------------------------------------------------------------------------*/
/*  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 (0x3881,0x55);
                write_DATAFLASH_BYTE (0x3882,0x56);
                write_DATAFLASH_BYTE (0x3855,0xaa);
                write_DATAFLASH_BYTE (0x3856,0x66);
//call read byte
                datatemp = read_APROM_BYTE(0x3882);

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

使用特权

评论回复
捉虫天师| | 2017-12-25 20:51 | 显示全部楼层
看上面的例子,只要在人家说的地址范围内操作就可以啊,但是你不能总对一个地址用死循环写,因为这个写入寿命次数有限。

使用特权

评论回复
Harvard| | 2017-12-25 22:15 | 显示全部楼层
官方例程有点问题的 自行修正 . 容易对单片机的一些控制寄存器误操作 造成单片机复位什么的

使用特权

评论回复
卧龙小子|  楼主 | 2017-12-26 12:21 | 显示全部楼层
捉虫天师 发表于 2017-12-25 20:51
看上面的例子,只要在人家说的地址范围内操作就可以啊,但是你不能总对一个地址用死循环写,因为这个写入寿 ...

好奇怪,我直接在主函数写入一个0x55,再把它读到一个变量,没有进入主循环,仿真看到那个变量一直都是0xFF

使用特权

评论回复
dongliushui| | 2017-12-26 19:06 | 显示全部楼层
你换个数写个试试看。

使用特权

评论回复
734774645| | 2017-12-27 11:06 | 显示全部楼层
对这个方面不了解,不知道这个掉电是主动的程序掉电,还是断电的意思i。

使用特权

评论回复
Harvard| | 2017-12-27 14:24 | 显示全部楼层
看我的例程吧 我帖子里面有  自行搜索

使用特权

评论回复
yiyigirl2014| | 2018-3-20 18:19 | 显示全部楼层
楼主搞定没,没有搞定搜索:掉电保存数据或者掉电存储

使用特权

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

本版积分规则

11

主题

23

帖子

0

粉丝