迪文科技论坛

 找回密码
 立即注册
搜索
查看: 4176|回复: 8

【51库函数】CPU初始化、读写存储器、读写Flash 20190722

[复制链接]

27

主题

75

回帖

911

积分

高级会员

Rank: 4

积分
911
发表于 2019-7-18 09:38:22 | 显示全部楼层 |阅读模式
本帖最后由 CCN 于 2019-7-23 15:09 编辑

大家好,分享一个T5L CPU的针对CPU初始化、读写变量存储器、读写Flash 的C51代码。见如下附件。
更新日志:2019.7.22    增加了RTC驱动的RX8130的驱动接口程序







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

4

回帖

199

积分

注册会员

Rank: 2

积分
199
发表于 2019-7-25 15:46:57 | 显示全部楼层
正需要呢,顶!
回复

使用道具 举报

0

主题

4

回帖

51

积分

注册会员

Rank: 2

积分
51
发表于 2019-8-10 16:29:11 | 显示全部楼层
您好,请问我调用您flash读取保存的函数,为什么需用延时才能读取正确?
回复

使用道具 举报

0

主题

4

回帖

51

积分

注册会员

Rank: 2

积分
51
发表于 2019-8-10 16:42:03 | 显示全部楼层
为什么变量储存器的地址是0x04?
回复

使用道具 举报

0

主题

181

回帖

1857

积分

金牌会员

Rank: 6Rank: 6

积分
1857
发表于 2019-8-13 08:52:36 | 显示全部楼层
这里必须要延时。T5L_Flash函数里有这个等待  wait_ok(0x0004);} //这里就相当于延时。也就等于NOR_FLASH_RW_CMD  0X08 里面的CPU操作完清零一样,读取0X08时才结束。这的T5L库函数.C我们使用的时候调用即可,厂家肯定经过很多次测试了的,不需要修改了的。
回复

使用道具 举报

45

主题

254

回帖

3409

积分

论坛元老

Rank: 8Rank: 8

积分
3409
发表于 2019-11-2 13:11:33 | 显示全部楼层
Francis 发表于 2019-8-10 16:29
您好,请问我调用您flash读取保存的函数,为什么需用延时才能读取正确?

根据flash文档
页写时间:0.6ms(0.25KB)典型,32KB写76.8ms
扇区擦除时间:典型50ms
块擦除时间:典型为150ms/250ms(32KB块/64KB块)
芯片擦除时间:典型60s(一分钟)
等待期间阻塞,dgus停止刷新
回复

使用道具 举报

15

主题

155

回帖

3480

积分

论坛元老

Rank: 8Rank: 8

积分
3480
发表于 2019-11-22 16:44:59 | 显示全部楼层
08指令,读NOR-FLASH,中间,也要延时。
void T5L_Flash(u8 mod, u16 addr, u32 addr_flash, u16 len)
这个子程序好。
回复

使用道具 举报

0

主题

8

回帖

43

积分

新手上路

Rank: 1

积分
43
发表于 2024-9-3 14:50:57 | 显示全部楼层
        void T5L_Flash(unsigned char mod,unsigned int addr,long addr_flash,unsigned int len)
{        ADR_H=0x00;
    ADR_M=0x00;
    ADR_L=0x04;
    ADR_INC=0x01;
    RAMMODE=0x8F;                //启动读Flash
        while(APP_ACK==0);
        DATA3=mod;
        DATA2=(unsigned char)(addr_flash>>16);
        DATA1=(unsigned char)(addr_flash>>8);
        DATA0=(unsigned char)(addr_flash&0xFE);
        APP_EN=1;
        while(APP_EN==1);       
        DATA3=(unsigned char)(addr>>8);
        DATA2=(unsigned char)(addr&0xFE);
        DATA1=(unsigned char)(len>>8);
        DATA0=(unsigned char)(len&0xFE);
        APP_EN=1;
        while(APP_EN==1);
        RAMMODE=0x00;
        wait_ok(0x0004);
}        //等待数据读取OK
ADR_L=0x04;这里为啥不是0x08。

void read_dgusii_vp(unsigned int addr,unsigned char *buf,unsigned int len)
{   unsigned char i;     
    i=(unsigned char)(addr&0x01);
    addr=addr/2;
    ADR_H=0x00;
    ADR_M=(unsigned char)(addr>>8);
    ADR_L=(unsigned char)(addr);
    ADR_INC=0x01;
    RAMMODE=0xAF;
        while(APP_ACK==0);
        while(len>0)
{   APP_EN=1;
    while(APP_EN==1);
    if((i==0)&&(len>0))   
    {   *buf++=DATA3;
        *buf++=DATA2;                     
        i=1;
                len--;        }
        if((i==1)&&(len>0))   
    {   *buf++=DATA1;
        *buf++=DATA0;                     
        i=0;
                len--;        }}
        RAMMODE=0x00;}
    addr=addr/2;,这里addr为啥要除以2?
回复

使用道具 举报

0

主题

694

回帖

4103

积分

论坛元老

Rank: 8Rank: 8

积分
4103
发表于 2024-9-3 19:31:38 | 显示全部楼层
精灵王 发表于 2024-9-3 14:50
void T5L_Flash(unsigned char mod,unsigned int addr,long addr_flash,unsigned int len)
{        ADR_H=0x00;
...

可以参考这个链接:【提问】求助DGUS变量读取数据问题
http://inforum.dwin.com.cn:20080 ... 29&fromuid=8850
(出处: 迪文科技论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-22 03:03 , Processed in 0.067783 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表