//====================EEPROM====================================================
//==============================================================================
//Subroutine: READ
//Function: Read one byte command
//==============================================================================
UC READ(UC EEADDR)
{
UC EEDATA;
//EWDS(); //08.12.05,add write disable.
_nop();
_nop();
_nop();
_nop();
_cs = 1;
_nop();
_nop();
_nop();
_nop();
Shift(cREAD,3); //OP Code
_rl(&EEADDR);
Shift(EEADDR,7); //Address
EEDATA = Shift(0x00,8);
_nop();
_nop();
_cs = 0;
_nop();
_nop();
_nop();
_nop();
return EEDATA;
}
//==============================================================================
//Subroutine: ERASE
//Function: Erase one byte command
//==============================================================================
void ERASE(UC EEADDR)
{
_nop();
_nop();
_nop();
_nop();
//EWEN(); //08.12.05,add write enable.
_cs = 1;
_nop();
_nop();
_nop();
_nop();
Shift(cERASE,3); //OP Code
_rl(&EEADDR);
Shift(EEADDR,7); //Address
_nop();
_nop();
_nop();
_nop();
_cs = 0;
_nop();
_nop();
_nop();
_nop();
ChkBusy();
//EWDS(); //08.12.05,add write disable.
}
//==============================================================================
//Subroutine: WRITE
//Function: Write one byte command
//==============================================================================
void WRITE(UC EEADDR, UC EEDATA)
{
_nop();
_nop();
_nop();
_nop();
//EWEN(); //08.12.05,add write enable.
_cs = 1;
_nop();
_nop();
_nop();
_nop();
Shift(cWRITE,3); //OP Code
_rl(&EEADDR);
Shift(EEADDR,7); //Address
Shift(EEDATA,8); //Address
_nop();
_nop();
_nop();
_nop();
_cs = 0;
_nop();
_nop();
_nop();
_nop();
ChkBusy();
//EWDS(); //08.12.05,add write disable.
}
//==============================================================================
//Subroutine: EWEN
//Function: Erase/Write Enable Command
//==============================================================================
void EWEN(void)
{
_nop();
_nop();
_nop();
_nop();
_cs = 1;
_nop();
_nop();
_nop();
_nop();
Shift(cEWEN,3); //OP Code
Shift(0xc0,7);
_nop();
_nop();
_nop();
_nop();
_cs = 0;
_nop();
_nop();
_nop();
_nop();
}
//==============================================================================
//Subroutine: EWDS
//Function: Erase/Write Disable Command
//==============================================================================
void EWDS(void)
{
_nop();
_nop();
_nop();
_nop();
_cs = 1;
_nop();
_nop();
_nop();
_nop();
Shift(cEWDS,3); //OP Code
Shift(0x00,7);
_nop();
_nop();
_nop();
_nop();
_cs = 0;
_nop();
_nop();
_nop();
_nop();
}
//==============================================================================
//Subroutine: ERAL
//Function: Erase all command
//==============================================================================
void ERAL(void)
{
_nop();
_nop();
_nop();
_nop();
_cs = 1;
_nop();
_nop();
_nop();
_nop();
Shift(cERAL,3); //OP Code
Shift(0x80,7); //Address
_nop();
_nop();
_nop();
_nop();
_cs = 0;
_nop();
_nop();
_nop();
_nop();
ChkBusy();
}
//==============================================================================
//Subroutine: WRITE
//Function: Write one byte command
//==============================================================================
void WRAL(UC EEDATA)
{
_nop();
_nop();
_nop();
_nop();
_nop();
_cs = 1;
_nop();
_nop();
_nop();
_nop();
_nop();
Shift(cWRAL,3); //OP Code
Shift(0x40,7);
Shift(EEDATA,8); //Address
_cs = 0;
_nop();
_nop();
_nop();
_nop();
_nop();
ChkBusy();
}
//==============================================================================
//Subroutine: Shift
//Function:
//==============================================================================
UC Shift(UC buf, UC cnt)
{
do
{
_nop();
_nop();
_nop();
_nop();
_nop();
_sk=0;
_nop();
_nop();
_nop();
_nop();
_nop();
if(buf & cTestb7)
_di = 1;
else
_di = 0;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_sk = 1;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_rl(&buf);
if(_do)
buf |= cSetb0;
else
buf &= cClrb0;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
}while(--cnt);
_sk = 0;
_nop();
_nop();
_nop();
_nop();
_nop();
return buf;
}
//==============================================================================
//Subroutine: ChkBusy
//Function:
//==============================================================================
void ChkBusy(void)
{
_nop();
_nop();
_nop();
_nop();
_nop();
_cs = 1;
_nop();
_nop();
_nop();
_nop();
_nop();
while(1)
{
_nop();
_nop();
// _sk = 1; //delete this line for no need clock by Andy Jiang 09-08-05
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
if(_do)
break;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
// _sk = 0; //delete this line for no need clock by Andy Jiang 09-08-05
_nop();
_nop();
_nop();
_nop();
_nop();
}
_sk = 0;
_cs = 0;
_nop();
_nop();
_nop();
_nop();
_nop();
[ 本帖最后由 jxb01033016 于 2010-2-5 13:52 编辑 ] |