📄 flash擦除.c
字号:
int flash_sec_erase(unsigned int sector_index)
{
unsigned int address;
volatile unsigned short *_p=FLASH_BASE;
address=Sec2Addr(sector_index); //开始进行sector擦除操作
_p[0x555]=0x00AA; //第一周期的写操作
_p[0x2AA]=0x0055; //第二周期的写操作
_p[0x555]=0x0080; //第三周期的写操作
_p[0x555]=0x00AA; //第四周期的写操作
_p[0x2AA]=0x0055; //第五周期的写操作
printk("Erasing sector %d.\n\rErasing...\n\rWait a second.\n\r",sector_index);
_p[address]=0x0030; //第六周期的写操作
return FlashDataToggle(address); //等待擦除过程结束
}
int FlashData Toggle(unsigned int address)
{
unsigned short uc1,uc2;
volatile unsigned short *_p=FLASH_BASE;
while(1){
uc1=_p[address];
uc2=_p[address]; //读取两次
if((uc1&0x40)==(uc2&0x40)) //如果Toggle bit 没有Toggle,则操作成功
{_p[0]=0xf0;return 1;}
if((uc2&0x20)==0x20)break; //D5是否为1?
}
uc1=_p[address];
uc2=_p[address]; //读取两次
if((uc2&0x40)==(uc1&0x40)) //如果Toggle 位没有Toggle,则操作成功
{_p[0]=0xf0;return 1;}
_p[0]=0xf0;
return 0; //操作失败
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -