TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F4794的Flash读写问题

有两组数据,需要分别存放在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例程写的。

后来没有办法,把本来写到两段中的内容合并,写到一段中去了。

虽然这样算是解决了,但还是不解其中原因。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F4794的Flash读写问题
分享到: 更多 (0)