打印

MSP430单片机信息flash的读写

[复制链接]
2634|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shenmulzb1985|  楼主 | 2012-8-20 15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于MSP430单片机,MSP430F149有2段的信息存储器(A和B,每段为128字节),而249则为4段的信息存储器(A、B、C、D,每段64字节),信息flash地址为0x1000~0x10FF,对其操作的程序如下:
void erase(unsigned int addr)               //段擦除子程序
{
  char * seg_ptr;                        
  seg_ptr=(char *)addr;                     // 指向段地址
  FCTL3=FWKEY;                              // 复位LOCK
  FCTL1=FWKEY+ERASE;                        // 段擦除使能
  *seg_ptr=0;                               // 空写启动
  FCTL3=FWKEY+LOCK;                         // 置位LOCK
}
void write_A(unsigned char number,unsigned char value)
{
  unsigned char *Flash_ptr;                          // Flash 指针
  Flash_ptr = (unsigned char *) ASEG_START;          // 指向段地址
  FCTL3 = FWKEY;                            // 复位LOCK
  FCTL1 = FWKEY + WRT;                      // 写使能,编程
  Flash_ptr = Flash_ptr + number;
  *Flash_ptr = value;                   // 把value写入FLASH
  FCTL1 = FWKEY;                            // 清写使能   ???
  FCTL3 = FWKEY + LOCK;                     // 置位LOCK
}
unsigned char  read_A(unsigned char number)
{
  unsigned char *Flash_ptr;                         // A段指针
  unsigned char i;
  Flash_ptr = (unsigned char *) ASEG_START;         // 初始化A段指针
  FCTL3 = FWKEY;                            // 复位LOCK
  FCTL1 = FWKEY + WRT;                      // 写使能
  Flash_ptr = Flash_ptr + number;
  i = *Flash_ptr;                            //
  FCTL1 = FWKEY;                            // 清写使能
  FCTL3 = FWKEY + LOCK;                     // 置位LOCK
  return i;
}
void write_B(unsigned char number,unsigned char value)
{
  unsigned char *Flash_ptr;                          // Flash 指针
  Flash_ptr = (unsigned char *) BSEG_START;          // 指向段地址
  FCTL3 = FWKEY;                            // 复位LOCK
  FCTL1 = FWKEY + WRT;                      // 写使能
  Flash_ptr = Flash_ptr + number;
  *Flash_ptr = value;                   // 把value写入FLASH
  FCTL1 = FWKEY;                            // 清写使能
  FCTL3 = FWKEY + LOCK;                     // 置位LOCK
}
unsigned char  read_B(unsigned char number)
{
  unsigned char *Flash_ptr;                         // A段指针
  unsigned char i;
  Flash_ptr = (unsigned char *) BSEG_START;         // 初始化A段指针
  FCTL3 = FWKEY;                            // 复位LOCK
  FCTL1 = FWKEY + WRT;                      // 写使能
  Flash_ptr = Flash_ptr + number;
  i = *Flash_ptr;          // 把A段的值复制到B段
  FCTL1 = FWKEY;                            // 清写使能
  FCTL3 = FWKEY + LOCK;                     // 置位LOCK
  return i;
}

在信息存储区的数据读写操作,均可调用上述函数完成,各位大虾看后又补充的以及MSP430其他类型的单片机的信息flash 的资料,请补充,谢谢!

相关帖子

沙发
lvjing880907| | 2012-8-21 11:34 | 只看该作者
很好的帖子!值得看一看

使用特权

评论回复
板凳
zhl100| | 2012-8-23 17:07 | 只看该作者
MSP43G2553 和 G2332在用 , 读出数值弄个指针读出来就完了吧,写进去差不多,都有对应的地址,注意下载仿真时候别把主程序和数据存储区都擦了就行了

使用特权

评论回复
地板
shenmulzb1985|  楼主 | 2012-9-4 13:48 | 只看该作者
main flash用好了,也顶一个小容量的flash外设的,何乐而不为呢

使用特权

评论回复
5
shenmulzb1985|  楼主 | 2012-9-17 14:20 | 只看该作者
对单片机flash的读写也不是很麻烦的,只是一般的我只能做到对信息存储区的读写,其他区的读写就没有尝试过的,希望有用过的大虾来帮我补充补充的

使用特权

评论回复
6
springspring| | 2012-9-17 21:49 | 只看该作者
手册一般都会有这种读写的程序的可以参考的

使用特权

评论回复
7
figo20042005| | 2012-9-18 17:31 | 只看该作者
觉得3;说的比较对,不妨试试看

使用特权

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

本版积分规则

0

主题

440

帖子

1

粉丝