打印

SST39VF6401操作的API接品函数

[复制链接]
1427|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
芯行天下|  楼主 | 2008-8-25 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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; 
}

相关帖子

沙发
芯行天下|  楼主 | 2008-8-25 16:59 | 只看该作者

自已沙发自已做

自已沙发自已做

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

87

主题

660

帖子

0

粉丝