请教各位大侠:MSP430F4250读写存储器问题

[复制链接]
179|0
 楼主 | 2018-2-8 11:29 | 显示全部楼层 |阅读模式
MSP430一个内部信息存储器读写一直不成功,调试时总是停在读取数据的中间,不知道原因在哪?附上程序请教各位,不胜感激!
#define SegmentStart 0x01000  //Segment = 0x01000~0x010FF  
#define SegmentSize 255 //SegmentA + SegmentB = 256  
void WriteSegment_256 (char index,char *value,char size);  
char ReadSegment_256(char index);  

void main(void)
{
  volatile unsigned int i;                                                         
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  FLL_CTL0 |= XCAP14PF;                     // Configure load caps
  for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to

  SD16CTL = SD16REFON+SD16SSEL0;            // 1.2V ref, SMCLK
  SD16CCTL0 |= SD16SNGL + SD16DF;                    // Single conv       
  //SD16CCTL0 |= SD16SNGL;                    // Single conv       
   SD16INCTL0 |= SD16INCH0+SD16INTDLY_0;
while (1)
{

   value=ReadSegment_256(1);

     for (i = 0; i < 0x900; i++);             // Delay  
    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);  

}
}




//*********************************************************  
//读取片内存储的数据  
//*********************************************************  
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  
}  

扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /5 下一条

快速回复 返回顶部 返回列表