📄 ereasflash.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 + -