Đương nhiên là cấu hình byte rùi bạn.
Code:
#define EE_SSPIF_BIT IFS2bits.SPI2IF
#define SPIREAD 0x03
#define SPIWRITE 0x02
#define SPIWRDI 0x04
#define SPIWREN 0x06
#define SPIRDSR 0x05
#define SPIWRSR 0x01
/*********************************************************************/
void EE_SPIPut(BYTE v)
{
BYTE dummy;
EE_SSPIF_BIT = 0;
dummy = EE_SSPBUF_REG;
EE_SSPBUF_REG = v;
while(EE_SSPIF_BIT == 0 );
}
/*********************************************************************/
BYTE EE_SPIGet(void)
{
EE_SPIPut(0x00);
return EE_SSPBUF_REG;
}
/*********************************************************************/
BYTE NVMRead(DWORD address)// read a 16-bit value starting at an even address
{
BYTE msb,lsb,temp;
// wait until any work in progress is completed
do
{
SPISelectEEPROM();
EE_SPIPut(SPIRDSR);
temp = EE_SPIGet();//read status register
SPIUnselectEEPROM();
}while(temp & 0x03);
// perform a 16-bit read sequence (two byte sequential read)
SPISelectEEPROM(); // select the Serial EEPROM
EE_SPIPut(SPIREAD);// read command
EE_SPIPut(address >> 8); // address MSB first
EE_SPIPut(address & 0xff);// address LSB (word aligned)
//msb = EE_SPIGet();
lsb = EE_SPIGet();
SPIUnselectEEPROM();
return (lsb);
}//ReadNVM
/*********************************************************************/
void NVMWrite( DWORD address, BYTE data)
{ // write a 16-bit value starting at an even address
BYTE temp;
// wait until any work in progress is completed
do
{
SPISelectEEPROM();
EE_SPIPut(SPIRDSR);
temp = EE_SPIGet();//read status register
SPIUnselectEEPROM();
}while(temp & 0x03);
// Set the Write Enable Latch
SPISelectEEPROM();
EE_SPIPut(SPIWREN);
SPIUnselectEEPROM();
// perform a 16-bit write sequence (2 byte page write)
SPISelectEEPROM(); // select the Serial EEPROM
EE_SPIPut(SPIWRITE);
EE_SPIPut(address >> 8); //address MSB first
EE_SPIPut(address & 0xff); // address LSB (word aligned)
EE_SPIPut(data);
SPIUnselectEEPROM();
}//WriteNVM