[技术问答] N76E003实现**功能

[复制链接]
2542|12
 楼主| 飘雪殇 发表于 2018-5-23 20:35 | 显示全部楼层 |阅读模式
本帖最后由 飘雪殇 于 2018-6-4 19:55 编辑

#define     DATA_SIZE           128
#define     PAGE_ERASE_AP       0x22
#define     BYTE_READ_AP        0x00
#define     BYTE_PROGRAM_AP     0x21
#define     PAGE_SIZE           128


void Trigger_IAP(void)
{   
    set_IAPGO;                                                                                                                                        //trigger IAP
    if((CHPCON&SET_BIT6)==SET_BIT6)             // if fail flag is set, toggle error LED and IAP stop
                {
                        clr_IAPFF;

                }
}

void Erase_APROM(u16 u16_addr)
{   
    UINT16 u16Count;

    set_IAPEN;                                                                                                        // Enable IAP function
                IAPFD = 0xFF;                                                                                                // IMPORTANT !! To erase function must setting IAPFD = 0xFF
    IAPCN = PAGE_ERASE_AP;
    set_APUEN;                                                                                                        //  APROM modify Enable
       
    for(u16Count=0x0000;u16Count<DATA_SIZE/PAGE_SIZE;u16Count++)                //
    {        
        IAPAL = LOBYTE(u16Count*PAGE_SIZE + u16_addr);
        IAPAH = HIBYTE(u16Count*PAGE_SIZE + u16_addr);
        Trigger_IAP();
    }
    clr_APUEN;
    clr_IAPEN;
}

void write_DATAFLASH_BYTE(u16 START_ADDR,u8 u8_Data)
{   
    set_IAPEN;
    set_APUEN;   
    IAPAL = LOBYTE(START_ADDR);
    IAPAH = HIBYTE(START_ADDR);
    IAPCN = BYTE_PROGRAM_AP;
                IAPFD = u8_Data;     
                Trigger_IAP();       
    clr_APUEN;
    clr_IAPEN;
}
       
//-------------------------------------------------------------------------

UINT8 read_APROM_BYTE(UINT16 Data_Addr)
{
        UINT8 rdata;

  set_IAPEN;
  IAPAL = Data_Addr;
  IAPAH = Data_Addr>>8;
  IAPCN = 0x00;
  rdata = 0x00;
       
        set_IAPGO;
  rdata = IAPFD;

  clr_IAPEN;

        return rdata;
}

wahahaheihei 发表于 2018-5-23 21:22 | 显示全部楼层
新唐还出了个手册的,专门介绍这个功能怎么做合理的。里面有个算法。
wahahaheihei 发表于 2018-5-23 21:22 | 显示全部楼层
防止重复写同一段,这样可以延长寿命。
antusheng 发表于 2018-5-23 23:45 | 显示全部楼层
这个功能不错,省了用EEPROM芯片了。
稳稳の幸福 发表于 2018-5-24 12:41 | 显示全部楼层
方法简单 ,这种很容易用到自己代码里。
xinpian101 发表于 2018-5-24 17:37 | 显示全部楼层
MARK,做个板子试试看。
xuanhuanzi 发表于 2018-5-24 18:10 | 显示全部楼层
这个操作666,比STC的简单。
jiekou001 发表于 2018-5-25 23:14 | 显示全部楼层
不错,好简单,复制保存,谢谢。
wanduzi 发表于 2018-5-25 23:20 | 显示全部楼层
你这个只实现了**,没有实现掉电检测。参考官方的有个文档,介绍怎么计算掉电保护用的电容。
热教皇 发表于 2018-6-12 14:33 | 显示全部楼层
mark,保留下来
yiyigirl2014 发表于 2018-6-13 10:00 | 显示全部楼层
还要考虑那个掉电速度的电容,我看那个手册了,有介绍怎么计算。
jiekou001 发表于 2018-8-27 18:57 | 显示全部楼层
又用到了,再看看。
yiyigirl2014 发表于 2018-8-28 10:07 | 显示全部楼层
IAP的应用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

20

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部