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]