有两组数据,需要分别存放在Segment D和Segment C中。擦除和写入函数如下:
//FLASH段擦除
void flash_erase(unsigned char *flash_ptr)
{ FCTL3 = FWKEY ; //清除LOCK标志,解锁
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL1 = FWKEY + ERASE ; //允许段擦除
*flash_ptr = 0; //擦除 FCTL3 = FWKEY + LOCK; //加锁
while(FCTL3 & BUSY);}
void write_flash(unsigned char *f_ptr,unsigned char *data_array, unsigned char amount)
{ unsigned char i;
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL3 = FWKEY; //清除LOCK标志
FCTL1 = FWKEY + WRT ; //写操作,块编程,+ BLKWRT;
if(amount<=64)
{
for(i=0;i<amount;i++)
{ *f_ptr = *data_array;
data_array++; //发送缓冲区地址加 1 f_ptr++; //写flash时,地址加 1
while(!(FCTL3 & WAIT)); //如果处于忙状态,则等待 ,若用软件仿真,去掉这语句 }
}
FCTL1 = FWKEY; //写操作完成,清除编程允许位 WRT,BLKWRT
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK;
}
void write_to_seg_d()
{
flash_erase(0x1000);
write_flash(0x1000,data,10);
}
void write_to_seg_c()
{
flash_erase(0x1040);
write_flash(0x1000,data,10);
}
在主程序中,分别向C段和D段写入数据:
write_to_seg_c();
write_to_seg_d();
结果发现C段和D段的数据不能同时存储,只能保存其中一段的数据。这是为何?
wszqq:
看 TI提供的例程先。
你写C、D段的程序中写flash地址一样了
minghua shang:
回复 wszqq:
抱歉 ,纯属手误。
void write_to_seg_c()
{
flash_erase(0x1040);
write_flash(0x1040,data,10);
}
minghua shang:
回复 minghua shang:
程序即是根据TI例程写的。
后来没有办法,把本来写到两段中的内容合并,写到一段中去了。
虽然这样算是解决了,但还是不解其中原因。