在线情况
楼主
  • 头像
  • 级别
    • 积分13
    • 经验421
    • 文章14
    • 注册2010-07-24
    F2274单片机FLASH擦写出错是什么原因
    [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]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
      • 积分13
      • 经验421
      • 文章14
      • 注册2010-07-24
      [P]谢谢斑竹。[/P][P]我知道了,我再按您说的试试。主要是该问题是随机出现的,在线调试不容易捕捉到异常。[/P]
      微控网感谢您的参与
      Powered by LeadBBS 9.2 .
      Page created in 0.1875 seconds with 7 queries.