[讨论] msp430 Flash 信息存储器读取问题

liangjin2807   2016-2-16 15:57 楼主
最近在学习MSP430 Flahs存储,用的官方G2仿真板,想法是把一组数据存储到MCU自带的信息存储器里面去,主程序先在0x1000地址存储了一个数组{1,2,3,4,5,6},然后在用程序改写这个地址的内容,结果程序运行后发现地址里的数据不是程序写入的数据,主要程序如下:
#include
#include  

#pragma location = 0x1000
const uchar   P_Word[6]={1,2,3,4,5,6};   

void main()
{   
  FCTL2=FWKEY +FSSEL_1+FN2;//+FN0+FN1+FN2+FN4              //Flash时钟设置,MCLK,4分频
  WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗   
  keysel();                       //键盘设置
  _EINT();                        //使能全局中断
  LCD_Init();                     //LCD初始化
  TA_sel();                       //设置TA定时器
  SevePassword();
    while(1)
    {}

}


void SevePassword(void)
{
  _DINT();             //关闭中断
  double* Flash_data_ptr;
  unsigned int* Flash_int_ptr;
  Flash_data_ptr = (double*)0x1000; //intialize
  FCTL1 = FWKEY + ERASE; //允许擦出
  FCTL3 = FWKEY; //解锁
  *Flash_data_ptr = 0;//空写,启动擦除
  FCTL1 = FWKEY + WRT;//允许写


  *Flash_data_ptr++=0x04030201;   //重新写入的数据
  
  FCTL1 = FWKEY;
  FCTL3 = FWKEY + LOCK;
  _EINT();                        //使能全局中断
}




程序刚载入后用仿真器读取INFO地址内容如下:
0x1000  0x04030201
0x1004  0xFFFF0605
运行后仿真器观察INFO地址内容变成了:
0x1000  0x4C800640
0x1004  0xFFFFFFFF

按说程序执行以后应该是把数据变成:
0x1000  0x04030201
0x1004  0xFFFFFFFF

查了很多资料说Flash读写要注意频率控制在257KHz至476KHz之间,我用的G2开发板,默认用的是DCO时钟,仿真器读取DCO=3,rsel=7资料上说频率在0.8~1.5MHZ之间,这样的话Flash时钟源选MCLK,分频在2~6之间就可以,我从2到6分频全部试过了,结果还是老样子。不知道哪位高手也遇到这个问题给讲解一下,现行谢过了!!



回复评论 (2)

找到问题了,这句:Flash_data_ptr = (double*)0x1000; //intialize
改成:Flash_data_ptr = (char*)0x1000; //intialize
就解决了
点赞  2016-2-16 20:55
恭喜楼主找到问题的所在
点赞  2016-2-17 08:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复