HI ,大家好,今天是2008年的第一天,不知大家上班是否很忙呢? 随着项目的进展,工作也越来起忙了,虽然是第一天也没有一点空闲呀,上午写了一个对SST39VF6401操作的API函数,这也是我整个项目中要使用的一个小模块,做好了放到这里以备后用。 /******************************************************/ /* */ /* */ /* 文件名称:.c */ /* 文件标识: */ /* 摘 要: */ /* */ /* 当前版本: */ /* 作 者: magicchip */ /* 完成日期: */ /* 修改版本: */ /* */ /* */ /*********************************************************/ #i nclude "..srcconfig.h" //#define rstflash(void) (IO1SET = SST39VF6401RST,DelayNS(1),IO1CLR = SST39VF6401RST) // rstflash(); /******************************************************************************************************** ** 函数名称:void resetsst(void) ** 函数功能:对flash存储器进行复位 ** 入口参数:无 ** 出口参数:无 ** create by: magicchip ** create data: 2007/12/28 ********************************************************************************************************/ void RESETSST(void) { uint16 *rstaddr; IO1CLR = SST39VF6401RST; DelayNS(1); IO1SET = SST39VF6401RST; rstaddr = (uint16 *)0x81000000; *rstaddr = 0x00f0; rstaddr = (uint16 *)0x82000000; *rstaddr = 0x00f0; } /******************************************************************************************************** ** 函数名称:bool writesst(uint32 writesstaddr, uint16 *writesstdata,uint8 writesstlen) ** 函数功能:对flash存储器进行写操作 ** 入口参数:存数据的起始地址,写数据的起始地址,写数据的长度 ** 出口参数:ture or false ** create by: magicchip ** create data: 2008/01/02 ********************************************************************************************************/ bool writesst(uint32 writesstaddr, uint16 *writesstdata,uint32 writesstlen) { volatile uint16 *sstaddr; uint16 sstdatatemp[2]; uint32 addr; uint32 i; addr = (writesstaddr & 0xff000000); for ( ;writesstlen>0;writesstlen--) { sstaddr = (uint16 *)(addr | (0x00005555*2)); *sstaddr = 0x00aa; sstaddr = (uint16 *)(addr | (0x00002aaa*2)); *sstaddr = 0x0055; sstaddr = (uint16 *)(addr | (0x00005555*2)); *sstaddr = 0x00a0; sstaddr = (uint16 *)writesstaddr; *sstaddr = *writesstdata; i = 100; while (i) { sstdatatemp[0] = *sstaddr; sstdatatemp[1] = *sstaddr; if ((sstdatatemp[0] & 0x0040) == (sstdatatemp[1] & 0x0040)) break; i--; } if (i==0) return FALSE; writesstaddr +=2; writesstdata++; } return TRUE; } /******************************************************************************************************** ** 函数名称:bool checkover(checkaddr) ** 函数功能:对器件进行擦除(扇区擦除,块擦除,器件擦除)。 ** 入口参数:擦除地址和擦除类型数据 ** 出口参数:TURE or FALSE ** create by: magicchip ** create data: 2008/01/02 ********************************************************************************************************/ bool eraseflash(uint32 eraseaddr,uint16 erasedata) { uint16 *eraseaddrtemp; uint32 addr; uint16 checkdata; uint32 i,j; for (j=5;j>0;j--) { addr = (eraseaddr & 0xff000000); eraseaddrtemp = (uint16 *)(addr | (0x00005555*2)); *eraseaddrtemp = 0x00aa; eraseaddrtemp = (uint16 *)(addr | (0x00002aaa*2)); *eraseaddrtemp = 0x0055; eraseaddrtemp = (uint16 *)(addr | (0x00005555*2)); *eraseaddrtemp = 0x0080; eraseaddrtemp = (uint16 *)(addr | (0x00005555*2)); *eraseaddrtemp = 0x00aa; eraseaddrtemp = (uint16 *)(addr | (0x00002aaa*2)); *eraseaddrtemp = 0x0055; eraseaddrtemp = (uint16 *)eraseaddr; *eraseaddrtemp = erasedata; i = 50; //delay 50ms. while(i) { DelayNS(100); //delay 1ms. i--; checkdata = *eraseaddrtemp; if ((checkdata & 0x0080) == 0x0080) return TRUE; else if ((checkdata & 0x0060) == 0x0060) break; } } return FALSE; }
|