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