|
unsigned char write(unsigned long addr, unsigned long data)
{
ESTAT_PVIOL = 1;
ESTAT_ACCERR = 1; //clear error flags
if(( ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))
{
ESTAT_PVIOL = 1;
ESTAT_ACCERR = 1; //clear error flags
return(0);
}
while(!ESTAT_CBEIF); //if there are still some commands in the buffer, wait
*(unsigned short *far)addr = 0xFF;
ECMD = EE_CMD_SECTORERASE;
ESTAT |= 0x80; //clear the interrupt flag
if((ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))//if there are erros
{
ESTAT_PVIOL = 1;
ESTAT_ACCERR = 1; //clear error flags
return(0);
}
while(!ESTAT_CBEIF); //if there are still some commands in the buffer, wait
while(!ESTAT_CCIF);
if( (ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))
{
ESTAT_PVIOL=1;
ESTAT_ACCERR=1; //clear error flags
return(0);
}
while(!ESTAT_CBEIF){}; //if there are still some commands in the buffer, wait
*(unsigned short *far)addr = ((unsigned short *)&data)[0];
//write the data into the address
ECMD = EE_CMD_WORDWRITE;
ESTAT |= 0x80; //clear the interrupt flag.
if(ESTAT_PVIOL == 1 || ESTAT_ACCERR == 1) //there are errors.
{
ESTAT_PVIOL=1;
ESTAT_ACCERR=1; //clear the error flags.
return(0);
}
while(!ESTAT_CCIF);
if( (ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))
{
ESTAT_PVIOL=1;
ESTAT_ACCERR=1; //clear error flags
return(0);
}
while(!ESTAT_CBEIF){}; //if there are still some commands in the buffer, wait
*(unsigned short *far)(addr+2) = ((unsigned short *)&data)[1]; //write the data into the address
ECMD = EE_CMD_WORDWRITE;
ESTAT |= 0x80; //clear the interrupt flag.
if(ESTAT_PVIOL == 1 || ESTAT_ACCERR == 1) //there are errors.
{
ESTAT_PVIOL=1;
ESTAT_ACCERR=1; //clear the error flags.
return(0);
}
while(!ESTAT_CCIF);
return 1;
}
地址从0x13f000开始
不知道能不能用? |
|