Board logo

标题: 求助:FLASH在线编程出错? [打印本页]

作者: dchuser    时间: 2006-9-7 22:00     标题: 求助:FLASH在线编程出错?

我在利用CodeWarrior for hc08 v5.0对单片机MC68HC908GP32进行FLASH在线编程时,写入


   FLBPR = 0x02;  //FLASH区0x8100起受保护


出现编译错误,错误提示如下:


error: C1830  Modifiable  lvalue expected.


是什么什么原因?


 


 


 


作者: seuafu2005    时间: 2006-9-8 10:55

FLBPR是只读的,不能如变量的方式写入,可以用如下方法
const byte FLBPR_INIT @0x0000FF7E = 0x02;

作者: dchuser    时间: 2006-9-10 14:33

我的程序如下:
其中flashsave()为主函数
FLASHdoerase(unsigned int addr)为擦除函数
FLASHdowrite(unsigned int addr)为写入函数

请楼上版主帮忙分析以下,谢谢!!!! 我的E-mail: dch968@163.com



void FLASHdoerase(unsigned int addr)
{
unsigned char i;
Faddr = addr;
FLCR1 = 0b00000010; //FLASH控制寄存器 ERASEE=1, MASS=0(页摖除
*(volatile unsigned char *)Faddr = 0x68; //任意数 =>FLASHaddress
DELAY10us(); //延时10us;
FLCR1 = 0b00001010; //1=>HVEN(加高压) 擦除操作
DELAY1ms(); //延时,大于1.6ms
FLCR1 = 0b00001000; //0=>ERASE;不选择擦除操作
DELAY1ms(); //延时10us
FLCR1 = 0b00000000; //0=>HVEN(取消高压)
DELAY1ms(); //延时10us
}

void FLASHdowrite(unsigned int addr)
{
unsigned char i,j;
Faddr = addr;
FLCR1 = 0b00000001; //PGM=1 选择写入操作
i = FLBPR; //读出FLBPR

*(volatile unsigned char *)Faddr = 0x68; //任意数 =>FLASHaddress
DELAY10us(); //延时10us;
FLCR1 = 0b00001001; //1=>HVEN(加高压) 写入操作
DELAY1ms(); //延时,大于1.6ms
for(i=0;i<10;i++)
{
*(volatile unsigned char *)(Faddr + i) = data; //数据写入FLASH地址
for(j=0;j<30;j++); //延时30us
}

FLCR1 = 0b00001000; //0=>ERASE;不选择烧写操作
DELAY1ms(); //延时10us
FLCR1 = 0b00000000; //0=>HVEN(取消高压)
DELAY1ms(); //延时10us
}

/**** addr:待烧写的FLASH区首地址 ********/
void FLASHsave(void)
{

unsigned char i;
FLBPR = 0x20;

for(i=0;i<10;i++)
{
data= i;
}
FLASHdoerase(0x9000);
FLASHdowrite(0x9000);

}

作者: seuafu2005    时间: 2006-9-11 10:03

对flash的操作需要copy到RAM里面进行,不能在flash中对flash擦写。
可以先看版头置顶帖,常见问题回答列表




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0