借鉴flash例程

MSP430F149内部的memory结构,60K Flash+2KRAM。Flash分为主存储区和信息存储区,操作都一样,只是主存储区每个段512字节,而信息存储区为128字节,方便擦写。



当我们有数据要保存到Flash存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。应当注意的是,此flash的操作频率为257kHz 到 476kHz,时钟源可选择,因此我们做时钟分频时应当保证频率在这之间,以下为我编写的参考程序。
void Flash_erase(uint addr)
{//段擦除,512bytes一段
  uchar s;
  s=__get_interrupt_state();//保存当前中断状态
  __disable_interrupt();
  while(FCTL3&BUSY);
  FCTL3=FWKEY;
  FCTL1=FWKEY+ERASE;
  *(uchar*)addr=0;
  while(FCTL3&BUSY);
  FCTL3=FWKEY+LOCK;
  __set_interrupt_state(s);//恢复中断状态
}

void Flash_write(uint addr,uchar dat)
{//单字节写入
  uchar s;
  s=__get_interrupt_state();
  __disable_interrupt();
  while(FCTL3&BUSY);
  FCTL3=FWKEY;
  FCTL1=FWKEY+WRT;
  *(uchar*)addr=dat;
  while(FCTL3&BUSY);
  FCTL1=FWKEY;
  FCTL3=FWKEY+LOCK;
  __set_interrupt_state(s);
}

void Flash_read(uint addr,uint len)
{//读取到数组,此处堆栈应改大
  uint i;
  for(i=0;i<len;i++)
   *(R+i)=*(uchar*)(addr+i);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值