1364|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP430单片机存储器结构总结 [复制链接]

      FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通过SegmengA及SegmentB就可以保存不掉电数据。注意:每次程序烧写到MSP430时,SegmengA及SegmentB都会被擦除!

      接下来贴出本文的程序代码,以及程序写入信息存储器之后的FLASH数据:

[cpp] view plain copy
#include    

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     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     buffer[index+i]=value[i];  
  for(i=0; i     *(flash_ptr++) = buffer[i];                     

  FCTL1 = FWKEY;                            // Clear WRT bit  
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit  
}  

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表