MC9S12G128 内部flash与eeprom的读写配置

来源:互联网 发布:大数据需求分析文档 编辑:程序博客网 时间:2024/04/30 02:44

因为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;  //写入第二个数据
    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);   //等待执行完成
}


数据的读出只要用指针即可。


0 0
原创粉丝点击