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); //等待执行完成
}
数据的读出只要用指针即可。
并且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); //等待执行完成
}
数据的读出只要用指针即可。
相关文章推荐
- LEETCODE 118
- BZOJ_P3517 翻硬币(博弈+数学)
- casperjs在windows下抓取元素乱码
- Android和WCF通信 - 大数据压缩后传输
- jenkins报错总结
- 找出所有和为S的连续正数序列
- 树莓派折腾录一. 必要的初始化(Raspberry Pi 2 model B + raspbian jessie)
- 数据库设计原则(转载)
- Xpath语法
- 大并发学习
- 上海学生事务中心&新华路派出所的位置
- R程序包
- Eclipse搭建Android开发环境(安装ADT,Android4.4.2)
- 设计模式之中介者模式
- 基于 Python 和 Scikit-Learn 的机器学习介绍
- 使用VideoView播放视频
- JavaWeb知识总结——搭建JavaWeb应用开发环境Tomcat服务器
- 如何使用ubuntu来编译驱动
- shell(1):shell基础及函数,字符串,if,while,时间处理等应用
- IOS学习之UIActionSheet的使用