打印
[技术问答]

N76E003 EEPROM官方程序不能用

[复制链接]
2198|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51scm|  楼主 | 2018-7-9 11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N76E003 EEPROM官方程序不能用:单独运行例程可以对0x3881开始的单元写入,正确,加入自己其它模块后读出全是0xff。程序总长8.4KB。其它模块很短时却正常的!请教各位问题在哪?(我已经做过一个项目是6.9995KB也是没问题,EEPROM程序相同)
沙发
jasontu| | 2018-7-9 14:27 | 只看该作者
IAP_BYATE.C修改一个阵列,当作修改的buffer.

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

volatile unsigned char xdata page_buffer[128];
UINT8 read_APROM_BYTE(UINT16 code *u16_addr);
/*****************************************************************************************************************
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;
        UINT16 u16_addrl_r;

        UINT16 tmp=0;
//Check page start address
        u16_addrl_r=(u16_addr/128)*128;
//Save APROM data to XRAM0
        for(looptmp=0;looptmp<0x80;looptmp++)
        {
        tmp=read_APROM_BYTE(u16_addrl_r+looptmp);
        page_buffer[looptmp]=tmp;
        }
// Modify customer data in XRAM
        page_buffer[u16_addr&0x7f] = u8_data;
       
//Erase APROM DATAFLASH page
                IAPAL = u16_addrl_r&0xff;
                IAPAH = (u16_addrl_r>>8)&0xff;
                IAPFD = 0xFF;
          set_IAPEN;
                set_APUEN;
    IAPCN = 0x22;                
                set_IAPGO;
               
//Save changed RAM data to APROM DATAFLASH
          
                set_IAPEN;
                set_APUEN;
          IAPCN = 0x21;
                for(looptmp=0;looptmp<0x80;looptmp++)
                {
                        IAPAL = (u16_addrl_r&0xff)+looptmp;
      IAPAH = (u16_addrl_r>>8)&0xff;
                        IAPFD = page_buffer[looptmp];
                        set_IAPGO;                       
                }
                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,0x55);       
                write_DATAFLASH_BYTE (0x3882,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);
                }
}
//-----------------------------------------------------------------------------------------------------------

使用特权

评论回复
板凳
huangcunxiake| | 2018-7-9 15:38 | 只看该作者
那就是那儿没设置对,单独搞和加入其它程序,理论上没有冲突的。

使用特权

评论回复
地板
xinpian101| | 2018-7-9 23:45 | 只看该作者
地址没有设置对?》

使用特权

评论回复
5
northeasttigar| | 2018-7-10 11:55 | 只看该作者
官方例程有些存在问题的,可以问他们技术人员,一般会有补充。

使用特权

评论回复
6
xuanhuanzi| | 2018-7-12 20:35 | 只看该作者
解决了没,是不是地址官方没有给对,看英文版的手册。

使用特权

评论回复
7
稳稳の幸福| | 2018-7-13 19:11 | 只看该作者
今天看到个贴,介绍这个的。

使用特权

评论回复
8
稳稳の幸福| | 2018-7-13 19:11 | 只看该作者
9
598330983| | 2018-7-15 16:24 | 只看该作者
官方的例子可以跑啊,没毛病。

使用特权

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

本版积分规则

4

主题

20

帖子

0

粉丝