mmdev 发表于 2013-2-5 08:44:43

MSP430读写片内FLASH保存数据

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!
FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通过SegmengA及SegmentB就可以保存不掉电数据。注意:每次程序烧写到MSP430时,SegmengA及SegmentB都会被擦除!
接下来贴出本文的程序代码,以及程序写入信息存储器之后的FLASH数据:
http://hi.csdn.net/attachment/201005/22/0_1274504051Z6ag.gif
#include<msp430xG43x.h>void WriteSegment_256 (char index,char *value,char size);char ReadSegment_256(char index);void main(void){WDTCTL = WDTPW + WDTHOLD;               // Stop watchdog timerFCTL2 = FWKEY + FSSEL0 + FN0;             // MCLK/2 for Flash Timing Generator   char str1={0xAA,0xBB,0xCC};    WriteSegment_256(0,str1,3);    for(char i=0;i<255;i++)    _NOP();                                     char str2={0xBB,0xAA,0xCC};WriteSegment_256(0,str2,3);}#define SegmentStart 0x01000//Segment = 0x01000~0x010FF#define SegmentSize 255 //SegmentA + SegmentB = 256//*********************************************************//读取片内存储的数据//*********************************************************char ReadSegment_256(char index){char *flash_ptr = ((char *) SegmentStart) + index;return *flash_ptr;}// *****************************************************//把数组写入数据到片内FLASH,必须先全部擦除再写入//参数index:保存数组的位置//参数value:数组的指针//参数size:数组的大小// *****************************************************void WriteSegment_256 (char index,char *value,char size){char buffer,i=0;char *flash_ptr = (char *) SegmentStart;    //先读取原FLASH数组for(i=0;i<SegmentSize;i++)    buffer=ReadSegment_256(i);    //擦除FLASH,必须FCTL1 = FWKEY + ERASE;                  // Set Erase bitFCTL3 = FWKEY;                            // Clear Lock bit*flash_ptr = 0;                           // Dummy write to erase Flash segment    //把整个数组都写入FLASHFCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation    for(i=0;i<size;i++)//修改原数组    buffer=value;for(i=0; i<SegmentSize; i++)//写入数据到FLASH    *(flash_ptr++) = buffer;                     FCTL1 = FWKEY;                            // Clear WRT bitFCTL3 = FWKEY + LOCK;                     // Set LOCK bit}
页: [1]
查看完整版本: MSP430读写片内FLASH保存数据