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

2019-07-24 15:05发布

MSP430单片机对片内FLASH的读写操作程序范例
// 参数: 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;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
firstblood
1楼-- · 2019-07-24 20:17
这个操作还是比较麻烦的吧
comeon201208
2楼-- · 2019-07-25 01:30
 精彩回答 2  元偷偷看……
angerbird
3楼-- · 2019-07-25 06:16
这个程序看着不是很复杂的。
dirtwillfly
4楼-- · 2019-07-25 10:06
angerbird 发表于 2015-12-12 20:27
这个程序看着不是很复杂的。

是的
dirtwillfly
5楼-- · 2019-07-25 14:11
comeon201208 发表于 2015-12-11 22:51
这个在进行写之前时候需要先进行解锁操作的。

一周热门 更多>