在线时间0 小时
UID179639
注册时间2010-4-2
NXP金币0
该用户从未签到
新手上路

- 积分
- 155
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2013-9-27 08:53:20
|
显示全部楼层
回复:求 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的是怎么样的呢? |
|