MSP430读写片内FLASH保存数据
扫描二维码
随时随地手机看文章
FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通过SegmengA及SegmentB就可以保存不掉电数据。注意:每次程序烧写到MSP430时,SegmengA及SegmentB都会被擦除!
接下来贴出本文的程序代码,以及程序写入信息存储器之后的FLASH数据:
#include
voidWriteSegment_256(charindex,char*value,charsize);
charReadSegment_256(charindex);
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//Stopwatchdogtimer
FCTL2=FWKEY+FSSEL0+FN0;//MCLK/2forFlashTimingGenerator
charstr1[3]={0xAA,0xBB,0xCC};
WriteSegment_256(0,str1,3);
for(chari=0;i<255;i++)
_NOP();
charstr2[3]={0xBB,0xAA,0xCC};
WriteSegment_256(0,str2,3);
}
#defineSegmentStart0x01000//Segment=0x01000~0x010FF
#defineSegmentSize255//SegmentA+SegmentB=256
//*********************************************************
//读取片内存储的数据
//*********************************************************
charReadSegment_256(charindex)
{
char*flash_ptr=((char*)SegmentStart)+index;
return*flash_ptr;
}
//*****************************************************
//把数组写入数据到片内FLASH,必须先全部擦除再写入
//参数index:保存数组的位置
//参数value:数组的指针
//参数size:数组的大小
//*****************************************************
voidWriteSegment_256(charindex,char*value,charsize)
{
charbuffer[SegmentSize],i=0;
char*flash_ptr=(char*)SegmentStart;
//先读取原FLASH数组
for(i=0;i
buffer[i]=ReadSegment_256(i);
//擦除FLASH,必须
FCTL1=FWKEY+ERASE;//SetErasebit
FCTL3=FWKEY;//ClearLockbit
*flash_ptr=0;//DummywritetoeraseFlashsegment
//把整个数组都写入FLASH
FCTL1=FWKEY+WRT;//SetWRTbitforwriteoperation
for(i=0;i
buffer[index+i]=value[i];
for(i=0;i
*(flash_ptr++)=buffer[i];
FCTL1=FWKEY;//ClearWRTbit
FCTL3=FWKEY+LOCK;//SetLOCKbit
}