9551|16

105

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

Dspic33EP512*写flash的问题 [复制链接]

 
用的是Dspic33ep512GM310,把一些参数写在flash里面保存,写的地址是0x52400,在擦除和写之后,Usart中断就停止工作了,是不是我的擦除函数和写函数有问题,熟悉的帮我看下
uint8 PageErase( uint32 flashAddress )
{
    NVMADR = ( flashAddress & 0xffff );
    NVMADRU = ( (flashAddress >> 16) & 0xffff );
       
    while(NVMCONbits.WR);
    NVMCON = 0x4003;
    __builtin_disi( 6);
    __builtin_write_NVM();
    Nop();
    Nop();
    while(NVMCONbits.WR);
    Nop();
    Nop();
    NVMCONbits.WREN=0;
    Nop();

    if( (NVMCONbits.WRERR == 1) || (NVMCONbits.URERR == 1) )
    {
        return ( WRERR_OR_UERR_ERROR );
    }
    else
    {
        return ( NO_ERROR );
    }
}
uint8  WordWrite( uint32 flashAddress, uint16 ramBuffer1,uint16 ramBuffer2)
{
    // Set up the NVMADR registers to the starting address of the page
    NVMADR = ( flashAddress & 0xFFFF );
    NVMADRU = ( (flashAddress >> 16) & 0xFFFF );
    NVMCON = 0x4001;
    TBLPAG=0xfa;
    __builtin_tblwtl(0x0000,ramBuffer1);//(( flashAddress & 0xFFFF ),ramBuffer);
    __builtin_tblwth(0x0001,0x00);//(( flashAddress & 0xFFFF )+1,0x00);
    __builtin_tblwtl(0x0002,ramBuffer2);
    __builtin_tblwth(0x0003,0x00);
    __builtin_disi( 6);
    __builtin_write_NVM();

    if( (NVMCONbits.WRERR == 1) || (NVMCONbits.URERR == 1) )
    {
        return ( WRERR_OR_UERR_ERROR );
    }
    else
    {
        return ( NO_ERROR );
    }

}

最新回复

请问解决了吗   详情 回复 发表于 2023-5-29 19:55
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
想问楼主,问题解决了吗?我在写bootloader,也遇到檫除flash和写入flash的问题。可以咨询否?

点评

解决了,目前没啥问题!  详情 回复 发表于 2016-8-25 16:38
 
 
 

回复

105

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
本帖最后由 风铃 于 2016-8-25 16:41 编辑
154462859 发表于 2016-8-19 17:24
想问楼主,问题解决了吗?我在写bootloader,也遇到檫除flash和写入flash的问题。可以咨询否?

解决了,目前没啥问题!就用的上面的函数,之前的问题是程序其他地方变量不一致导致的!
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

4
 
纠结,我也出现这样情况,  不知道你的是什么情况导致的,艾,好纠结

点评

我的是其它变量类型不一致导致的,这个函数本身是对的。  详情 回复 发表于 2017-2-25 18:38
 
 
 

回复

105

帖子

0

TA的资源

一粒金砂(中级)

5
 
a20084666 发表于 2016-12-12 19:26
纠结,我也出现这样情况,  不知道你的是什么情况导致的,艾,好纠结

我的是其它变量类型不一致导致的,这个函数本身是对的。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 
请问楼主在编程序的时候是怎么知道有这些内建函数的?

点评

手册好像是XC16编译器的使用手册  详情 回复 发表于 2017-5-19 14:40
这个有个手册的,安装编译环境的时候有个文档可以看,还有就是问度娘。  详情 回复 发表于 2017-5-19 10:13
 
 
 

回复

105

帖子

0

TA的资源

一粒金砂(中级)

7
 
erkuizhang 发表于 2017-4-11 21:51
请问楼主在编程序的时候是怎么知道有这些内建函数的?

这个有个手册的,安装编译环境的时候有个文档可以看,还有就是问度娘。
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

8
 
各位工程大咖们,方案这块有用到硬件加密芯片,保护软件,防止抄板的,请联系我。QQ:937684930
 
 
 

回复

105

帖子

0

TA的资源

一粒金砂(中级)

9
 
erkuizhang 发表于 2017-4-11 21:51
请问楼主在编程序的时候是怎么知道有这些内建函数的?

手册好像是XC16编译器的使用手册
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

10
 
风铃 发表于 2017-5-19 14:40
手册好像是XC16编译器的使用手册

楼主能把文档分享下吗,我刚找了下XC16编译器的手册,里面并没有提到这些接口函数

点评

uint8 PageErase( uint32 flashAddress ) uint8  WordWrite( uint32 flashAddress, uint16 ramBuffer1,uint16 ramBuffer2) 这两函数是自己写的,__builtin_tblwth(),__builtin_write_NVM();这种是编  详情 回复 发表于 2017-6-1 13:45
 
 
 

回复

105

帖子

0

TA的资源

一粒金砂(中级)

11
 
yuyuyu2517 发表于 2017-5-30 20:05
楼主能把文档分享下吗,我刚找了下XC16编译器的手册,里面并没有提到这些接口函数

uint8 PageErase( uint32 flashAddress )
uint8  WordWrite( uint32 flashAddress, uint16 ramBuffer1,uint16 ramBuffer2)
这两函数是自己写的,__builtin_tblwth(),__builtin_write_NVM();这种是编译手册里有的
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

12
 
风铃 发表于 2017-6-1 13:45
uint8 PageErase( uint32 flashAddress )
uint8  WordWrite( uint32 flashAddress, uint16 ra ...

了解,非常感谢!
您能再分享下读取flash的函数吗?
我现在用的dspic33ep16gs202,也同样需要在flash某地址保存几个字节的参数,我想用你的代码试试看

点评

uint16_t WordRead( uint32_t flashAddress ) { uint16_t i; int savedTBLPAG=0; savedTBLPAG = TBLPAG; TBLPAG=((flashAddress>>16)&0xff); i=__builtin_tblrdl((flashAddress&0xffff));  详情 回复 发表于 2017-8-2 14:27
 
 
 

回复

105

帖子

0

TA的资源

一粒金砂(中级)

13
 
yuyuyu2517 发表于 2017-6-1 16:13
了解,非常感谢!
您能再分享下读取flash的函数吗?
我现在用的dspic33ep16gs202,也同样需要在flash ...

uint16_t WordRead( uint32_t flashAddress )
{
    uint16_t i;
    int savedTBLPAG=0;
    savedTBLPAG = TBLPAG;
    TBLPAG=((flashAddress>>16)&0xff);
    i=__builtin_tblrdl((flashAddress&0xffff));
TBLPAG=savedTBLPAG ;
    return i;

}
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 

测试只能读取这个数据,不能写入FLASH ,是用你的代码,是怎么回事,芯片一样

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

15
 

感谢楼主分享,我刚开始用microchip的芯片,好多地方不会用,楼主分享给我不少帮助

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

16
 

请教楼主怎样知道FLASH中哪页可以用来存储数据

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
a20084666 发表于 2016-12-12 19:26 纠结,我也出现这样情况, 不知道你的是什么情况导致的,艾,好纠结

请问解决了吗

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表