flash擦除.c

来自「Norflash通用的读写」· C语言 代码 · 共 33 行

C
33
字号
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 + =
减小字号Ctrl + -
显示快捷键?