智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1964|回复: 1
打印 上一主题 下一主题

D_flash掉电存数据问题

[复制链接]

8

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
威望
191
贡献
107
兑换币
107
注册时间
2013-3-8
在线时间
98 小时
毕业学校
中国计量学院
跳转到指定楼层
1#
发表于 2013-3-29 21:32:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned int    Buffer[]={0xff,0x2222,0x3333,0x4444};//数据缓存区,只能一次写入四个数据
unsigned int    data_Address=0x0000;
unsigned int    date_read[4];
void DFlash_Write(word ADDR16)
{
    while(FSTAT_CCIF==0);
    if(FSTAT_ACCERR)           //判断并清除标志位;
        FSTAT_ACCERR=1;
    if(FSTAT_FPVIOL)           //判断并清除标志位;
        FSTAT_FPVIOL=1;
    FCCOBIX_CCOBIX=0x00;
    FCCOB=0x1110;         //写入命令和高位地址
    FCCOBIX_CCOBIX=0x01;  //地址后16位
    FCCOB=ADDR16;         //写入低16位地址
    FCCOBIX_CCOBIX=0x02;  //写入第一个数据
    FCCOB=Buffer[0];
    FCCOBIX_CCOBIX=0x03;  //写入第二个数据
    FCCOB=Buffer[1];
    FCCOBIX_CCOBIX=0x04;  //写入第三个数据
    FCCOB=Buffer[2];
    FCCOBIX_CCOBIX=0x05;  //写入第四个数据
    FCCOB=Buffer[3];  
      
    FSTAT_CCIF=1;         //写入执行命令
    while(FSTAT_CCIF==0); //等待执行完毕
}
word DFlash_Read (word destination)
{
    byte   lastepage;          //用于存储EPAGE的值
    byte   epage;              //用于计算EPAGE的值
    unsigned int data;         //读取出的数据
    lastepage = EPAGE;   //保存EPAGE的值
    epage = (byte)((DFLASH_LOWEST_START_PAGE)+(destination >>10));   //计算EPAGE
    EPAGE=epage;                                                     //给EPAGE赋值

    data = READword((destination & (DFLASH_PAGE_SIZE - 1)) + DFLASH_PAGE_WINDOW_START);  //读取页面窗口中的数据
    EPAGE= lastepage;       //恢复EPAGE的值
    return(data);
}
void DFlash_Erase(word ADDR16)
{   
  while(FSTAT_CCIF==0);
  if(FSTAT_ACCERR)           //判断并清除标志位;
      FSTAT_ACCERR=1;
  if(FSTAT_FPVIOL)           //判断并清除标志位;
      FSTAT_FPVIOL=1;
  
  FCCOBIX_CCOBIX=0x00;
  FCCOB=0x1210;           //写入擦除命令和高位地址
  FCCOBIX_CCOBIX=0x01;   
  FCCOB=ADDR16;           //写入低16位的地址
  FSTAT_CCIF=1;           //启动执行命令
  while(FSTAT_CCIF==0);   //等待执行完成
}
void DFlash_Init(void)
{
   while(FSTAT_CCIF==0);            //等待正在处理的FLASH操作完成
   FCLKDIV=0x0F;                    //外部晶振为16M.FLASH时钟不超过1M,具体参照手册
   FCNFG=0x00;                      //禁止中断
   while(FCLKDIV_FDIVLD==0);        //等待时钟设置成功
}
void main(void)
{
DisableInterrupts;
DDRB=0xff;
DFlash_Init();
//DFlash_Erase(data_Address);     
// DFlash_Write(data_Address);
  date_read[0]=DFlash_Read(data_Address);
  date_read[1]=DFlash_Read(data_Address+2);
  date_read[2]=DFlash_Read(data_Address+4);
  date_read[3]=DFlash_Read(data_Address+6);
}
附上程序
问题:程序能够正常读写D_flash,但是掉电屏蔽写函数后,想读出数据却不对,是哪里没有设置好吗?

6

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
792
威望
404
贡献
232
兑换币
252
注册时间
2013-3-13
在线时间
78 小时
2#
发表于 2013-6-1 17:56:23 | 只看该作者
请问楼主解决好没?我也遇到这样的问题了,求大侠们指点一二。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-22 06:57 , Processed in 0.053533 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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