需要用MSP430G2553的flash掉电后保存一些数据,这些数据能写入flash的息区地址D段,在不掉电的情况下,也能读取。一旦掉电后,再读就是0xff。
我的读写函数如下 通过按键将数据写入flash,上电后在main函数中先读取flash数据,但是都为0xff 读写程序参考自大神:
//FLASH段擦除void flash_erase(unsigned int *pc_word)
{
while(FCTL3 & BUSY); //如果处于忙状态,则等待 FCTL3 = FWKEY ; //清出LOCK标志,解锁
FCTL1 = FWKEY + ERASE ; //允许段擦除
*pc_word = 0; //擦除..擦除..
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK ; //加锁!!
}
//******************************************************************************//向FLASH信息区读出指定数量的字节数据
//unsigned int*pc_word :信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void read_array(unsigned char *pc_byte, unsigned char *array,unsigned char amount)
{
unsigned char i; if(amount<=127)
{
for(i=0;i< amount;i++)
{
*array = *pc_byte; //读数据,读数据时,flash地址自动加 1 ??
array++; //接收缓冲区地址加 1
pc_byte++;
}
}
}
//******************************************************************************//向FLASH信息区写入指定数量的字节数据
//unsigned char *pc_byte 信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void write_array(unsigned char *pc_byte,unsigned char *array, unsigned char amount)
{
unsigned char i;
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL3 = FWKEY ; //清出LOCK标志
FCTL1 = FWKEY + WRT ; //写操作,块编程,+ BLKWRT;
if(amount<=127)
{
for(i=0;i < amount;i++)
{
*pc_byte = *array;
//*pc_byte = num;
// num +=1;
array++; //发送缓冲区地址加 1
pc_byte++; //写flash时,地址人为加 1
while(!(FCTL3 & WAIT)); //如果处于忙状态,则等待 ,若用软件仿真,去掉 //这语句
}
}
FCTL1 = FWKEY; //写操作完成,清除编程允许位 WRT,BLKWRT
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK; //加锁!!
}
|