返回首页
当前位置: 主页 > MSP430单片机 >

MSP430读写擦除FLASH程序

时间:2009-11-23 21:30来源:网络 作者:网友 点击:
MSP430 读写擦除FLASH程序

1-简介
    MSP430单片机对片内FLASH的读写操作程序
范例。

2-程序例程
//******************************************************************************

// 参数: wAddr 为地址 , 范围 0x1000~0xFFFF

void ReadFlash(U16 wAddr,U8 *bBuf,U8 bLen)
{
   while (bLen--)
     *bBuf++=*(U8 *)wAddr++;
   return;
}

void WriteFlash(U16 wAddr,U8 *bBuf,U8 bLen)
{
    U8 reg1,reg2;

    reg1=_BIC_SR(GIE);

    reg2=IE1;IE1=0;                   // 保护原来中断标志,并关闭有关中断。
  
    // 写一个字节数据到指定flash地址
    while (bLen--)
     {
      while (FCTL3&BUSY);             // 等待以前FLASH操作完成
      FCTL3 = FWKEY;    
      FCTL1 =FWKEY+WRT;               // 发送写flash命令
      *(U8 *)wAddr++=*bBuf            // 写数据到指定的flash地址

      while(FCTL3&BUSY);              // 等待写操作完成
      FCTL1 = FWKEY;     
      FCTL3 = FWKEY+LOCK;             // 对FLASH内容进行加锁保护
     }

     if(reg1&GIE) _BIS_SR(GIE);       // 恢复中断标志
        IE1=reg2;         
 
     return;
}

void EraseSectorFlash(U16 wAddr)
{
    U8 reg1,reg2;
 
    reg1=_BIC_SR(GIE);
 
    reg2=IE1;                        // 保护有关中断标志

    IE1=0;                           // 关闭IE1中断

    while(FCTL3&BUSY);               // 等待FLASH编程结束

    FCTL3 = FWKEY;                   // 为了准备编程而初始化FLASH控制寄存器3

    FCTL1 = FWKEY+ERASE;             // 发送FLASH擦除命令

    *(U8 *)wAddr=0;                  // 启动擦除操作

    while(FCTL3&BUSY);               // 等待擦除操作完成

     FCTL1 = FWKEY;                  // 撤销任何对FLASH的操作命令

     FCTL3 = FWKEY+LOCK;             // 对FLASH内容进行加锁保护

    if(reg1&GIE) _BIS_SR(GIE);       // 恢复中断标志

         IE1=reg2;
      
     return;
}

//******************************************************************************
//例程结速

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容