MSP430的Flash操作

该博客详细介绍了如何在MSP430微控制器上进行Flash操作,包括精准延时程序、写入信息段A以及将A段内容复制到段B的过程。通过设置FCTL寄存器进行擦除和写入操作,并在完成操作后锁定存储器。

#include <msp430x14x.h>

#define uint unsigned int
#define uchar unsigned char

/***********************************************************************************************

 精准的延时程序

***********************************************************************************************/

#define CPU_F ((double)8000000.0)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

uchar  value;
void write_SegA(char value);
void copy_A2B(void);
/*********************************************************************
      FCTL1:用于控制所有写(编程)或者删除操作的有效位
      FCTL2:主要对进入时序发生器的时钟进行定义
      FCTL3:用于控制FLASH存储器操作,保存相应的状态标志和错误标志
*********************************************************************/

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  FCTL2 = FWKEY + FSSEL_1 + FN_1;//定义原始时钟,W是A5  R 96  选择MCLK,2分频
                                
  value =0;
  while(1)
  {
    write_SegA(value++);//写信息段A
    copy_A2B();         //信息段A复制到信息段B
  }
 
}

/*******************写信息段A******************/
void write_SegA(char value)
{
  char *Flash_ptr;              //定义flash指针
  uint i;
  Flash_ptr = (char *)0x1080;   //定义起始的地址
  FCTL1=FWKEY+ERASE;            //设置允许编程位
  FCTL3=FWKEY;                   //清除LOCK位
  *Flash_ptr = 0;                //空写,启动擦除
  FCTL1=FWKEY+WRT;                //允许写
  for(i=0;i<128;i++)            //写够128个字节
  {
    *Flash_ptr++=value;
  }
  FCTL1=FWKEY;               
  FCTL3=FWKEY+LOCK;           //锁定
}


void copy_A2B(void)
{
  char *Flash_ptrA;
  char *Flash_ptrB;
  uint i;
  Flash_ptrA=(char *)0x1080;
  Flash_ptrB=(char *)0x1000;
  FCTL1=FWKEY+ERASE;            //设置允许编程位
  FCTL3=FWKEY;                     //清除LOCK位
  *Flash_ptrB=0;
  FCTL1=FWKEY+WRT;              //允许写
  for (i=0;i<128;i++)
  {
    *Flash_ptrB++=*Flash_ptrA;
  }
  FCTL1= FWKEY;
  FCTL3=FWKEY+LOCK;         //锁定
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值