⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ereasflash.c

📁 电能表源码
💻 C
字号:
/*************************************************************************************

	文件类型:
	文件作用:对flash进行擦除操作
	修改权限:
	文件相关:
	
	创 建 人:chenbo
	创建日期:2007.11.24
	当前版本:Ver0.1
	
	版本信息:Ver0.1					

**************************************************************************************/
#include "Tiger.h"
/*
static unsigned int code ereasflashaddr01[8]=
{ FL_engdotaddrone_z,
  FL_engdotaddrtwo_z,
  FL_engintone_a,
  FL_enginttwo_a,
  FL_engdotaddr_f,
  FL_maxxuliang,
  FL_yinshu,
  FL_wrbuffer
};

static unsigned int code ereasflashaddr02[4]=
{ FL_dianliufanxiang,
  FL_lasteng,
  FL_jiaobiao01,
  FL_canshu01
};

static unsigned char code clr_bittable[]=                  //清零表格
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

static unsigned char code set_bittable[]=
{BIT0,BIT1,BIT2,BIT3,BIT4,BIT5,BIT6,BIT7};
*/
//======================================================
//函数功能:对flash进行页擦除操作
//入口参数:地址
//返回参数:0:成功,1:失败
//======================================================
unsigned char Ereas_pageflash(unsigned int addrflash)
{ unsigned char value;
  value=0;
  IAP_FLASH_PageErase(addrflash);
  if(Check_flashpage(addrflash)==1)          //擦除不成功
    value=1;
  return value;   
}

//=========================================================
//函数功能:初始化flash模块
//========================================================
void Int_ereasflashmode(void)
{  busy_flash=0;                          //清零标志位
   busy_buffflash=0;                      //清零buffer忙
 }

//==============================================================
//函数功能:flash擦除模块
//
//==============================================================
void ereasflash_mode(void)
{ unsigned int addr_flash;
  unsigned char value,i,bufferflag,flag_point,offset_point;
  value=0;
  if(busy_flash==0)
    {  if(flag_askerastindianpage==1)                         //停电页是否需要擦除
	      { value=1;
		    addr_flash=FL_tingdianpage;
		  }
       else if(flag_ereasflash01.byte!=0)
          { bufferflag=flag_ereasflash01.byte;
            offset_point=0;
            for(i=0;i<8;i++)
               { if((bufferflag&0x01)==1)                    //如果有页需要擦除
                     { value=1;                               //置标志位
                       addr_flash=ereasflashaddr01[i];        //查需要擦除的地址
  			           flag_point=1;
			           break;
			         }
		        else                                         //查询下下一标志位
		             { bufferflag=bufferflag>>1;
			           offset_point++;
			         }
		       }
	     }
    }
 if(value==1)                                                //如果有页需要擦除
	{ busy_flash=1;                                             //置忙标志位
      if(addr_flash>=0x7000)
        { Ready_progamflash();
		  IAP_FLASH_PageErase(addr_flash);     //擦除flash
		  End_progamflash();
          if(Check_flashpage(addr_flash)==0)                //擦除成功
		       flag_ereasflash01.byte=flag_ereasflash01.byte&clr_bittable[offset_point];  //清零擦除标志位
		  else                                                    //擦除失败
		     { if(flag_errorflash01.byte&set_bittable[offset_point]==1)   //如果该也已经出错
		   	       flag_ereasflash01.byte=flag_ereasflash01.byte&clr_bittable[offset_point];  //清零擦除标志位
             }
    
		  if(addr_flash==FL_wrbuffer)     //如果时对缓存页擦除
		     if(F_askerasbuffer==0)      //如果擦除成功
		         busy_buffflash=0;      //清忙标志位
			
		}
	 else if(addr_flash==0x6e00)                 //对停电页进行擦除
        {  Ready_progamflash();
		   IAP_FLASH_PageErase(addr_flash);     //擦除flash
		   End_progamflash();
		   if(Check_flashpage(addr_flash)==1)          //擦除不成功
              {if(flag_errtingdianpage==1)
			      flag_askerastindianpage=0;
			  }
		   else
		       flag_askerastindianpage=0;
        } 
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -