首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:FLASH在线编程出错?

求助:FLASH在线编程出错?

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


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


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


error: C1830  Modifiable  lvalue expected.


是什么什么原因?


 


 


 

FLBPR是只读的,不能如变量的方式写入,可以用如下方法
const byte FLBPR_INIT @0x0000FF7E = 0x02;
我的程序如下:
其中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);

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