Dspic33EP512*写flash的问题

2019-03-25 18:50发布

用的是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 );
    }

}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
154462859
1楼-- · 2019-03-26 03:01
想问楼主,问题解决了吗?我在写bootloader,也遇到檫除flash和写入flash的问题。可以咨询否?
风铃
2楼-- · 2019-03-26 03:29
 精彩回答 2  元偷偷看……
a20084666
3楼-- · 2019-03-26 06:30
纠结,我也出现这样情况,  不知道你的是什么情况导致的,艾,好纠结
风铃
4楼-- · 2019-03-26 07:25
a20084666 发表于 2016-12-12 19:26
纠结,我也出现这样情况,  不知道你的是什么情况导致的,艾,好纠结

我的是其它变量类型不一致导致的,这个函数本身是对的。
erkuizhang
5楼-- · 2019-03-26 08:05
请问楼主在编程序的时候是怎么知道有这些内建函数的?
风铃
6楼-- · 2019-03-26 09:27
erkuizhang 发表于 2017-4-11 21:51
请问楼主在编程序的时候是怎么知道有这些内建函数的?

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

一周热门 更多>