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数据:

#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 timer FCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator char str1[3]={0xAA,0xBB,0xCC}; WriteSegment_256(0,str1,3); for(char i=0;i<255;i++) _NOP(); char str2[3]={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[SegmentSize],i=0; char *flash_ptr = (char *) SegmentStart; //先读取原FLASH数组 for(i=0;i<SegmentSize;i++) buffer[i]=ReadSegment_256(i); //擦除FLASH,必须 FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY; // Clear Lock bit *flash_ptr = 0; // Dummy write to erase Flash segment //把整个数组都写入FLASH FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for(i=0;i<size;i++)//修改原数组 buffer[index+i]=value[i]; for(i=0; i<SegmentSize; i++)//写入数据到FLASH *(flash_ptr++) = buffer[i]; FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值