博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xs128 D-Flash读写
阅读量:6860 次
发布时间:2019-06-26

本文共 4830 字,大约阅读时间需要 16 分钟。

#include "includes.h"    uint16   Buffer[]={
0x1111,0x2222,0x3333,0x4444};//数据缓存区,只能一次写入四个数据 uint16 data_Address = 0x0000; uint16 date_read[4]; /*********************************************************** ** 名 称:void DFlash_Init(void) ** 功 能:DFlash初始化 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无 ************************************************************/ void DFlash_Init(void) { while(FSTAT_CCIF==0); //等待正在处理的FLASH操作完成 FCLKDIV=0x4E; //外部晶振为16M.FLASH时钟不超过1M,具体参照手册 FCNFG=0x00; //禁止中断 while(FCLKDIV_FDIVLD==0); //等待时钟设置成功 } /*********************************************************** ** 名 称:void DFlash_Write(uint16 ADDR16) ** 功 能:向DFLASH写入数据 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无 ************************************************************/ void DFlash_Write(uint16 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); //等待执行完毕 } /*********************************************************** ** 名 称:uint16 DFlash_Read (uint16 destination) ** 功 能:由DFLASH读取数据 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无 ************************************************************/ uint16 DFlash_Read (uint16 destination) { uint8 lastepage; //用于存储EPAGE的值 uint8 epage; //用于计算EPAGE的值 uint16 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(uint16 ADDR16) ** 功 能:擦除DFLASH的一个分区 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无 ************************************************************/ void DFlash_Erase(uint16 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); //等待执行完成 }

 

/***************************************************************** **  函数说明:飞思卡尔xs128   DFlash **  版      本: V0.99                                         **  修      改: 庞辉    芜湖联大飞思卡尔工作室                                                         **  修改日期:2011年09月26日                                **                                                          **  说      明:无      **                                                           **  版本更新:无                                                         ****************************************************************** **注        意: LED          PB0 **                  BUTTON   PM1     ******************************************************************/    #include "includes.h"    /*********************************************************** ** 名        称:void main(void) ** 功        能:主函数 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无 ************************************************************/   void main(void)   {      Start();      Start_go();      EnableInterrupts;            //设置PB0口LED灯作为指示,读取DFlash正确则亮,否则不亮      DDRB_DDRB0 = 1;      PORTB_PB0 = 1;            DDRM_DDRM1 = 0;            FOREVER()      {                  if(PTM_PTM1 == 0)                  {                          //确保先擦除后写入                          DFlash_Erase(data_Address);                               DFlash_Write(data_Address);                          }                   //读取DFlash数据                     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);                   //判断读取数据是否正确                  if(date_read[0]==0x1111&&date_read[1]==0x2222&&date_read[2]==0x3333&&date_read[3]==0x4444)  //判断数据是否正确                  {                          PORTB_PB0 = 0;                  }       }     }

转载地址:http://mbxyl.baihongyu.com/

你可能感兴趣的文章
[Node.js] Initialize a LoopBack Node.js Project through the CLI
查看>>
nginx补丁格式说明(CVE-2016-4450为例)
查看>>
C#编程(八十一)---------- 捕获异常
查看>>
Kinect2.0点云数据获取
查看>>
Omi新成员omi-router正式发布
查看>>
CentOS7.2 安装Tomcat
查看>>
二进制数组
查看>>
how tomcat works 总结
查看>>
Java+FlashWavRecorder实现网页录音并上传
查看>>
月球美容计划之最小生成树(MST)
查看>>
块状元素与内联元素的差别
查看>>
【SSH 基础】SSH框架--struts深入具体解释(一)
查看>>
Redis源代码分析(十三)--- redis-benchmark性能測试
查看>>
JVM 运行时的内存分配
查看>>
Shuttle ESB(一)——入门实例
查看>>
在SAE安装原版WORDPRESS(图文讲解)
查看>>
分布式与集群的区别是什么
查看>>
AS-->创建项目(慢)和打开项目(慢)等需要注意的问题
查看>>
2014年java软件project师面试题收集
查看>>
Java并发编程:Callable、Future和FutureTask
查看>>