智能车制作

标题: 求 9S12G128 eeprom 代码 [打印本页]

作者: nickzmj    时间: 2013-9-27 09:36
标题: 求 9S12G128 eeprom 代码
大家好,关于MC9S12G128 的参考资料太少了,现在最近在研究MC9S12G128  但关于eeprom的操作一点资料也没找到,求哪位大侠发个例子学习学习,多谢了
//对 EEPROM 初始化
void EEPROM_init(void){
   ECLKDIV=0x4A;                   // 晶振:16M/8=2M,2M/(1+10)=181.8k: 150k--200k                                    
   ECNFG=0x00;                     // disable eeprom operate interrupt 中断关闭
   while(ECLKDIV_EDIVLD == 0);     // wait stedy  ECLKDIV_EDIVLD为1 表示时钟设置好了
   EPROT_EPOPEN=1;                 //全部EEPROM不保护,0:全部保护
   EPROT_EPDIS=1;                  // 1:EEPROM开放 。 0:保护(但有EPROT[2-0]设定保护范围)
   //EPROT[2-0]保护范围111-000 :512-64B 。从0X7FF顶往下 。
}
//----------------------------------------------------------------------------------------------
void Erase_all_eeprom(void){
   DisableInterrupts;
   while(ESTAT_CBEIF==0);    // ESTAT_CBEIF为1 表示正准备接受命令 。 0:代表缓冲区满 。
//以下4步是固定的
   *(EEPROM_ADDR_BASE)=0xFFFF; // 先向地址中写入一个字(要编程的数),擦除一般写入0XFF
   ECMD=EEP_Sect_Erase;       //写入命令序列模式字(要擦除还是写入)
   ESTAT_CBEIF=1;             //ESTAT_CBEIF=1 开始命令
   asm nop;
   while(ESTAT_CCIF==0);     // ESTAT_CCIF变1 ,表示命令执行完毕
   
   while(ESTAT_PVIOL);       // ESTAT_PVIOL为1 表示对保护的EEPROM有误操作
   while(ESTAT_ACCERR);      // ESTAT_ACCERR为1 表示非法使用EEPROM
   
   //ESTAT_BLANK 为1是表示命令校验是EEPROM已擦除了
   EnableInterrupts;
}
//----------------------------------------------------------------------------------------------
void Erase_eeprom(unsigned int addr){
   DisableInterrupts;
   while(ESTAT_CBEIF==0);    // ESTAT_CBEIF为1 表示正准备接受命令 。 0:代表缓冲区满 。
//以下4步是固定的
   *(EEPROM_ADDR_BASE+addr)=0xFFFF; // 先向地址中写入一个字(要编程的数),擦除一般写入0XFF
   ECMD=EEP_Word_Erase;       //写入命令序列模式字(要擦除还是写入)
   ESTAT_CBEIF=1;             //ESTAT_CBEIF=1 开始命令
   asm nop;
   while(ESTAT_CCIF==0);     // ESTAT_CCIF变1 ,表示命令执行完毕
   
   while(ESTAT_PVIOL);       // ESTAT_PVIOL为1 表示对保护的EEPROM有误操作
   while(ESTAT_ACCERR);      // ESTAT_ACCERR为1 表示非法使用EEPROM
   
   //ESTAT_BLANK 为1是表示命令校验是EEPROM已擦除了
   EnableInterrupts;
}
//----------------------------------------------------------------------------------------------
void Write_eeprom(unsigned int addr,int data){
   DisableInterrupts;
   while(ESTAT_CBEIF==0);    // ESTAT_CBEIF为1 表示正准备接受命令 。 0:代表缓冲区满 。
//以下4步是固定的
   *(EEPROM_ADDR_BASE+addr)=data; // 先向地址中写入一个字(要编程的数),擦除一般写入0XFF
   ECMD=EEP_Word_Prog;       //写入命令序列模式字(要擦除还是写入)
   ESTAT_CBEIF=1;             //ESTAT_CBEIF=1 开始命令
   while(ESTAT_CCIF==0);     // ESTAT_CCIF变1 ,表示命令执行完毕
   
   while(ESTAT_PVIOL);       // ESTAT_PVIOL为1 表示对保护的EEPROM有误操作
   while(ESTAT_ACCERR);      // ESTAT_ACCERR为1 表示非法使用EEPROM
   
   //ESTAT_BLANK 为1是表示命令校验是EEPROM已擦除了
   EnableInterrupts;
}
//-----------------------------------------------------------------------------------------------
int Read_eeprom(unsigned int addr){
   int TempData;
   DisableInterrupts;
   TempData=*(EEPROM_ADDR_BASE+addr);    // 读EEPROM的偏移地址的数据      
   EnableInterrupts;
   return(TempData);
}

这是DG128的代码,那g128的是怎么样的呢?

作者: 以梦为马    时间: 2013-9-27 12:10
留下邮箱
作者: nickzmj    时间: 2013-9-27 20:09
多谢这位兄台  nickzmj@163.com  
作者: nickzmj    时间: 2013-9-28 16:28
以梦为马 发表于 2013-9-27 12:10
留下邮箱

老大,快发我一下吧  nickzmj@163.com   9S12G128 eeprom 代码

作者: 零距离    时间: 2013-9-28 18:30





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2