您的位置:首页 > 其它

MC9S12G128 内部flash与eeprom的读写配置

2016-03-09 16:26 239 查看
因为MC9S12G128 有内部flash和eeprom所以不需要用到 sci来通信。

并且MC9S12G128的flash与eeprom是共同管理的所以存取方式相同,只是地址范围不同。如下表所示

flash module的初始化

void eeprom_Init(){

   while(FSTAT_CCIF==0);            //等待正在处理的FLASH操作完成

   FCLKDIV=0x17;                    //外部晶振为24M.FLASH时钟不超过1M

   while(FCLKDIV_FDIVLD==0);        //等待时钟设置成功

}其中FCLKDIV的设置是根据busclock来进行选择的,我用的是24M,其他对照下表

flash module的写入

其中Buffer[4]是一个缓存数据数组。

void eeprom_write(){

   while(FSTAT_CCIF==0);       //等待正在处理的FLASH操作完成

   if(FSTAT_ACCERR)           //判断并清除标志位

        FSTAT_ACCERR=1;

    if(FSTAT_FPVIOL)           //判断并清除标志位

        FSTAT_FPVIOL=1;

    FCCOBIX_CCOBIX=0x00;

    FCCOB=0x1100;         //写入命令和高位地址

    

    

    FCCOBIX_CCOBIX=0x01;  //地址后16位

    FCCOB=0x0400;         //写入低16位地址             这个地址就是flash地址的后十六位我这里写死了可以用变量。

    FCCOBIX_CCOBIX=0x02;  //写入第一个数据

    FCCOB=Buffer[0];  

    FCCOBIX_CCOBIX=0x03;  //写入第二个数据

 
4000
  FCCOB=Buffer[1];  

    FCCOBIX_CCOBIX=0x04;  //写入第三个数据

    FCCOB=Buffer[2];

    FCCOBIX_CCOBIX=0x05;  //写入第四个数据

    FCCOB=Buffer[3];  

      

    FSTAT_CCIF=1;         //写入执行命令

    while(FSTAT_CCIF==0); //等待执行完毕   

}   

擦除数据。

void DFlash_Erase()

{   

  while(FSTAT_CCIF==0);

  if(FSTAT_ACCERR)           //判断并清除标志位;

      FSTAT_ACCERR=1;

  if(FSTAT_FPVIOL)           //判断并清除标志位;

      FSTAT_FPVIOL=1;

  

  FCCOBIX_CCOBIX=0x00;

  FCCOB=0x1200;           //写入擦除命令和高位地址

  FCCOBIX_CCOBIX=0x01;   

  FCCOB=0x0400;           //写入低16位的地址     这个地址就是flash地址的后十六位我这里写死了可以用变量。

  FSTAT_CCIF=1;           //启动执行命令

  while(FSTAT_CCIF==0);   //等待执行完成

}

数据的读出只要用指针即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: