奇怪问题,求指教!关于MSP430将数据保存至info flash

[复制链接]
 楼主| hwk612167 发表于 2011-7-18 21:53 | 显示全部楼层 |阅读模式
1)   FCTL1 = FWKEY + WRT;            //允许写操作
2)   while( FCTL3 & BUSY );          //等待Flash存储器完成操作
3)    for( u8_i=0; u8_i<u8_len; u8_i++ )
4)    {
5)       *dptr++ = *sptr++;
6)        while( !(FCTL3 & WAIT) );   //为1表示准备好写下一个字节
7)    }
以上代码,连续写多个字节,可以正常完成。去掉while( !(FCTL3 & WAIT) );也可以正确写。但是,查看msp430 user guide,上面说明多字节谢需要将FCTL1的BLKWRT置位,第1)句写成FCTL1 = FWKEY + WRT +BLKWRT;  却不能正确写入数据,请问这是为何???
另外,手册中将WAIT只在BLKWRT位置位时才有需检测,我上述代码加不加都可以写成功,是什么原因呢?还有很多教材讲,WAIT是跨了block才需检测,而手册中描述是块写入时每写一个字(或字节)就需检测一次,谁对谁错呢?
实在弄不清楚,希望知道的指点下,谢谢啦!!!
 楼主| hwk612167 发表于 2011-7-19 13:24 | 显示全部楼层
:dizzy:看来这个版块人气不够旺啊~
 楼主| hwk612167 发表于 2011-7-21 13:00 | 显示全部楼层
没人用内部flash???还是
shimx 发表于 2011-7-21 13:46 | 显示全部楼层
还在睡午觉吧:sleepy:
t.jm 发表于 2011-7-21 16:14 | 显示全部楼层
1# hwk612167
这个问题看一看TI给的例子就知道了。随便载录几段例子程序:
1)
for (i=0; i<64; i++)
  {
    *Flash_ptr++ = value;                   // Write value to flash
  }
2)
for (i=0; i<128; i++)
  {
    *Flash_ptrB++ = *Flash_ptrA++;          // copy value segment A to segment B
  }
这中间都没用while( !(FCTL3 & WAIT) );
 楼主| hwk612167 发表于 2011-7-21 18:13 | 显示全部楼层
User guide上说多字节写要置位BLKWRT是肿么回事?
msp430ing 发表于 2011-7-21 22:22 | 显示全部楼层
那是说要整块写的时候,多字节也可以一个字节一个字节的写,就不要置位了
 楼主| hwk612167 发表于 2011-7-24 00:37 | 显示全部楼层
那再请问下,一个块64字节,我不置位BLKWRT写64字节与置位区别在哪》?还有不置位BLKWRT,能跨block连续写嘛??谢谢
7# msp430ing
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:前进 前进 前进

20

主题

511

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部