[P]我的程序是这样写的:[/P][P]#include <msp430x22x2.h>[/P][P]void FlashWB_A(void) //存储电流和温度数据
{ _DINT(); unsigned int *Flash_ptr; Flash_ptr = (unsigned int *)0x1040; [/P][P] FCTL3=FWKEY; FCTL1 = FWKEY + ERASE; *Flash_ptr = 0; FCTL1 = FWKEY + WRT; *Flash_ptr++ = current_set_value[0]; *Flash_ptr++ = current_set_value[1]; *Flash_ptr++ = current_set_value[2]; *Flash_ptr++ = wendu_set_value; FCTL1=FWKEY; FCTL3=FWKEY+LOCK; _EINT();
}[/P][P]void InitialFlash(void) //FLASH初始化[/P][P]{[/P][P] FCTL2 = FWKEY + FSSEL_0+ FN4+FN2+FN0; //时钟源为ACLK,擦写频率大约是360KHz[/P][P]}[/P][P]void Initialvar(void) //变量初始化 读取flash中的电流设定值、温度设定值[/P][P]{ unsigned int *q0; q0=(unsigned int *)0x1040; //读取flash中的电流设定值 current_set_value[0] = *q0++; if((current_set_value[0]<0)||(current_set_value[0]>R_CURRENT_MAX)) { current_set_value[0] = R_CURRENT_MAX-20; } current_set_value[1] = *q0++; if((current_set_value[1]<0)||(current_set_value[1]>G_CURRENT_MAX)) [/P][P] { current_set_value[1] = G_CURRENT_MAX-50; } current_set_value[2] = *q0++; if((current_set_value[2]<0)||(current_set_value[2]>B_CURRENT_MAX)) { current_set_value[2] = B_CURRENT_MAX-20; [/P][P] } wendu_set_value = *q0++; if((wendu_set_value<100)||(wendu_set_value>350)) [/P][P] { wendu_set_value = 250; }
}[/P][P]程序中还用到了:[/P][P]Timer A:时钟源为SMCLK;[/P][P]ADC10:时钟源为ADC10OSC;[/P][P]UART:时钟源为SMCLK;[/P][P]IIC:用P4口模拟的主机IIC,未用自带的模块。[/P][P]此程序用串口设定电流和温度,写入FLASH里,每次开机自动从FLASH里面读取这些数据。在大多数板子上运行没发现问题,但有几块板子电流和温度的设定值偶尔会出现复位现象,即所谓的“记不住数”:FLASH里的数据会恢复成初始值。[/P][P]请各位高手帮我分析一下是哪里的原因?[/P][P] [/P] |