×
嵌入式 > 技术百科 > 详情

MSP430单片机对片内FLASH的读写操作程序范例

发布时间:2020-06-01 发布时间:
|
// 参数: 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; 
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?