打印

msp430g2553...怎么状态数据存入flash中.断电后一直保存的

[复制链接]
1886|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pywmiss|  楼主 | 2015-11-13 18:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pywmiss 于 2015-11-13 18:37 编辑

msp430g2553
现在客户要求有4个位置信息要在断电后保存着,重新上电可以继续使用.
我的第一想法是加一个24c02的IC..后来查了430G2553里面有4段64字节==共256字节的空间.
查了资料也看了例程.
在线仿真的话..我可以查哪里看到数据是否有存入FLASH呢?
这4个位置数据是用户存储的...当用户有存入动作时存入一次到FLASH中...当断电换电池初始化的过程中把上次的值读取出来.就可以.

4个位置信息是1字节(16位).要怎么存入呢?如何读取?

如下面的例程中,value是不是一个8位的字节?为什么要循环64次?没看明白 ....麻烦有用过的朋友帮忙指点一下.谢谢!!!

还有关于频率,要怎么确认...430的MCLK,,ACK...SMLK,,,看半天没能理解....
==我现在只用内部的DCO-16MHZ,这种FLASH的频率好像是要257K-476Khz..是不是用MCLK做64分频=250KHZ..这样可以吗?怎么确认这频率呢?

void write_SegC (char value)
{
  char *Flash_ptr;                          // Flash pointer
  unsigned int i;

  Flash_ptr = (char *) 0x1040;              // Initialize Flash pointer
  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<64; i++)
  {
    *Flash_ptr++ = value;                   // Write value to flash
  }

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}



相关帖子

沙发
dirtwillfly| | 2015-11-13 20:27 | 只看该作者
这个代码是哪一个例程?最好结合其余代码来看频率配置和代码

使用特权

评论回复
板凳
xyz549040622| | 2015-11-14 08:17 | 只看该作者
1.为什么要循环64次,应该是把一个段中写满了吧
2.关于flash的时钟,数据手册时钟树中,你看看那个图图就理解了。具体可以看看例程中的配置
3.不理解flash是如何写的,你可以试着改改,写进去然后读出来,就知道写在哪里了。

使用特权

评论回复
地板
pywmiss|  楼主 | 2015-11-14 16:58 | 只看该作者
dirtwillfly 发表于 2015-11-13 20:27
这个代码是哪一个例程?最好结合其余代码来看频率配置和代码

就是CCS里面那个唯一用了FLASH存储的例程..

使用特权

评论回复
5
dirtwillfly| | 2015-11-15 10:07 | 只看该作者
本帖最后由 dirtwillfly 于 2015-11-15 10:10 编辑
pywmiss 发表于 2015-11-14 16:58
就是CCS里面那个唯一用了FLASH存储的例程..
写64次,这是一个信息flash的大小

使用特权

评论回复
6
dirtwillfly| | 2015-11-15 10:12 | 只看该作者
这只是一个操作信息flash的例程而已,没啥意义。
比如说为啥写64次,我只能说是为了写满一个信息flash
为啥要从信息flash C复制到D,神仙才知道

使用特权

评论回复
7
dirtwillfly| | 2015-11-15 10:13 | 只看该作者
250KHZ频率操作flash是不合适的,频率太低了

使用特权

评论回复
8
pywmiss|  楼主 | 2015-11-18 11:33 | 只看该作者
刚才重新看了用户手册.
频率问题现在理解了...我的DCO是16MHZ...要分频45之后大概是400Khz==这样就可以了
还有个问题请教一下:

void Flash_Read_Word(unsigned int *addr, unsigned int *wordbuf, unsigned int len)
{
    unsigned int cnt;

    while(FCTL3 & BUSY);                 // 等待flash空闲
    for(cnt = 0; cnt < len; cnt++)
    {
        *(wordbuf + cnt) = *(addr + cnt);   // 读数据
    }
    FCTL3 = FWKEY + LOCK;                   // Lock

===如上面程序:::addr,wordbuf...前面都有一个*号..(C语言没学过...)
我在调用这段代码时...是可以直接给数值吗?
    Flash_Read_Word(0x1040, point_buf, 16);
=对于这个*号.不是很理解>?
====另外,我的位置变量是一个整形数据,应该有两个8位的.在上面的程序中,我是要写16还是写2?
=在用户手册好像是写flash有256字节....不是256位吧...

目前我用上面的程序直接试验..已经把时钟设置好了....读的值好像不对...不知道要怎么查.....
麻烦版主帮忙指点一下...谢谢!!!  @dirtwillfly

使用特权

评论回复
9
pywmiss|  楼主 | 2015-11-18 11:36 | 只看该作者
刚才重新看了用户手册.
频率问题现在理解了...我的DCO是16MHZ...要分频45之后大概是400Khz==这样就可以了
还有个问题请教一下:

void Flash_Read_Word(unsigned int *addr, unsigned int *wordbuf, unsigned int len)
{
    unsigned int cnt;

    while(FCTL3 & BUSY);                 // 等待flash空闲
    for(cnt = 0; cnt < len; cnt++)
    {
        *(wordbuf + cnt) = *(addr + cnt);   // 读数据
    }
    FCTL3 = FWKEY + LOCK;                   // Lock

===如上面程序:::addr,wordbuf...前面都有一个*号..(C语言没学过...)
我在调用这段代码时...是可以直接给数值吗?
    Flash_Read_Word(0x1040, point_buf, 16);
=对于这个*号.不是很理解>?
====另外,我的位置变量是一个整形数据,应该有两个8位的.在上面的程序中,我是要写16还是写2?
=在用户手册好像是写flash有256字节....不是256位吧...

目前我用上面的程序直接试验..已经把时钟设置好了....读的值好像不对...不知道要怎么查.....
麻烦版主帮忙指点一下...谢谢!!!
@dirtwillfly

使用特权

评论回复
10
dirtwillfly| | 2015-11-18 13:39 | 只看该作者
带*号的变量或者函数变量,都是指针类型
这个建议你看看c语言的资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

793

帖子

6

粉丝