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
}
} 最好用串口把INFO中的数据发出来,用仿真器进去看不一定可靠 eastboy 发表于 2015-5-5 08:37
最好用串口把INFO中的数据发出来,用仿真器进去看不一定可靠
条件有点限制,没有办法 IAR有个设置,每次调试擦不擦info 刚看了图, 设置没问题.
msp430f4250试过,info能留下来 swap2013 发表于 2015-5-5 19:44
刚看了图, 设置没问题.
msp430f4250试过,info能留下来
可以把你的代码贴出来吗? 要注意当工作电压低于2.7V或以下时,就不能写FLASH,否则就不好说了。
页:
[1]