苹果520 发表于 2015-5-5 08:11:11

M430F2013 info 掉电后info flash里面的数据丢了,如果写了之后..

本帖最后由 苹果520 于 2015-5-5 08:23 编辑

求助各位430的大侠:
                                M430F2013 info 掉电后info flash里面的数据丢了,如果写了之后马上查看info里面的消息。会发现写的数据都是对的。但是掉电之后再去读取数据就都没有了。(有时候可以成功,有时候不成功!!!)很不解!!!!望大侠指点! 在线等!!!!
下面附上代码:
配置也改了:



#include <msp430.h>


charvalue;                              // 8-bit value to write to segment A
#define Flash_PtrA(char *)0x10B0;             // Initialize Flash segment A pointer
#define Flash_PtrB(char *)0x1080;             // Initialize Flash segment B pointer
#define Flash_PtrC(char *)0x1040;             // Initialize Flash segment C pointer
#define Flash_PtrD(char *)0x1000;             // Initialize Flash segment D pointer
unsigned char aabb={4,9,1,8,5,6,7,4,9,11};
unsigned char ccdd={0,1,1,1,1,1,1,1,1,1};
// Function prototypes
void write_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength);
void Read_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength);



int main(void)
{
WDTCTL = WDTPW + WDTHOLD;               // Stop watchdog timer
if (CALBC1_12MHZ==0xFF)                                        // If calibration constants erased
{                                                                                       
    while(1);                               // do not load, trap CPU!!       
}
DCOCTL = 0;                               // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_12MHZ;                  // Set DCO to 12MHz
DCOCTL = CALDCO_12MHZ;
FCTL2 = FWKEY + FSSEL_2 + FN2 + FN5;             // MCLK/3 for Flash Timing Generator

value = 0;                              // initialize value
//write_SegX(1,aabb,10);
Read_SegX(1,ccdd,10);

while(1)                                  // Repeat forever
{
//write_SegC(value++);                  // Write segment C, increment value
//copy_C2D();                           // Copy segment C to D
   // __no_operation();                     // SET BREAKPOINT HERE
//Read_SegX(1,ccdd,10);
}
}


void write_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength)
{
char *Flash_ptr;                        // Flash pointer
unsigned int i;
switch(sSegment)
{
    case 1:
    Flash_ptr = Flash_PtrD;            // Initialize Flash pointer
    break;
    case 2:
    Flash_ptr = Flash_PtrC;            // Initialize Flash pointer
    break;
    case 3:
    Flash_ptr = Flash_PtrB;            // Initialize Flash pointer
    break;
    case 4:
    Flash_ptr = Flash_PtrA;            // Initialize Flash pointer
    break;   
}
//Flash_ptr = (char *) 0x1040;            // Initialize Flash pointer

_DINT();
FCTL1 = FWKEY + ERASE;                  // Set Erase bit
FCTL3 = FWKEY;                            // Clear Lock bit
*Flash_ptr = 0;                           // Dummy write to erase Flash segment

FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

for (i=0; i<sLength; i++)
{
    *Flash_ptr++ = sValue;                   // Write value to flash
      //   while((FCTL3 & BUSY) == BUSY);      //Busy
}

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

void Read_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength)
{
   char *Flash_ptr;                        // Flash pointer
unsigned int i;
switch(sSegment)
{
    case 1:
    Flash_ptr = Flash_PtrD;            // Initialize Flash pointer
    break;
    case 2:
    Flash_ptr = Flash_PtrC;            // Initialize Flash pointer
    break;
    case 3:
    Flash_ptr = Flash_PtrB;            // Initialize Flash pointer
    break;
    case 4:
    Flash_ptr = Flash_PtrA;            // Initialize Flash pointer
    break;   
}
for (i=0; i<sLength; i++)
{
    sValue = *Flash_ptr++;          // copy value segment C to segment D
}
}

eastboy 发表于 2015-5-5 08:37:27

最好用串口把INFO中的数据发出来,用仿真器进去看不一定可靠

苹果520 发表于 2015-5-5 09:15:58

eastboy 发表于 2015-5-5 08:37
最好用串口把INFO中的数据发出来,用仿真器进去看不一定可靠

条件有点限制,没有办法

swap2013 发表于 2015-5-5 19:37:36

IAR有个设置,每次调试擦不擦info

swap2013 发表于 2015-5-5 19:44:26

刚看了图, 设置没问题.
msp430f4250试过,info能留下来

苹果520 发表于 2015-5-5 20:09:46

swap2013 发表于 2015-5-5 19:44
刚看了图, 设置没问题.
msp430f4250试过,info能留下来

可以把你的代码贴出来吗?

hwh1328 发表于 2015-6-27 19:06:35

要注意当工作电压低于2.7V或以下时,就不能写FLASH,否则就不好说了。
页: [1]
查看完整版本: M430F2013 info 掉电后info flash里面的数据丢了,如果写了之后..