HI ,大家好,今天是2008年的第一天,不知大家上班是否很忙呢?
随着项目的进展,工作也越来起忙了,虽然是第一天也没有一点空闲呀,上午写了一个对SST39VF6401操作的API函数,这也是我整个项目中要使用的一个小模块,做好了放到这里以备后用。
/******************************************************/
/* */
/* */
/* 文件名称:.c */
/* 文件标识: */
/* 摘 要: */
/* */
/* 当前版本: */
/* 作 者: magicchip */
/* 完成日期: */
/* 修改版本: */
/* */
/* */
/*********************************************************/
#i nclude "..\src\config.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;
}
文章评论(0条评论)
登录后参与讨论