This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28377操作EEPROM

为什我的28377中自带的SPI读写外部的EEPROM不成功,怎么读数据都是0xff  主要函数如下


void main(void)
{
InitSysCtrl();
InitSpiaGpio();
InitPieVectTable();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
spi_init(); // init SPI.
EEPROM_CS = 1;
STA_READ();
for(;;)
{
RX_data=EEPROM_READ(0x00000);
}
}
void spi_init()
{
SpiaRegs.***.all =0x0007; // Reset on, rising edge, 16-bit char bits
SpiaRegs.***.all =0x0006; // Enable master mode, normal phase,
// enable talk, and SPI int disabled.
SpiaRegs.SPIBRR.all =0x0004;
SpiaRegs.***.all =0x0087; // Relinquish SPI from Reset
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}

void spi_xmit(Uint16 a)
{
SpiaRegs.SPITXBUF = a;
while(SpiaRegs.SPISTS.bit.INT_FLAG == 0);
SPIBUF = SpiaRegs.SPIRXBUF;
}

void STA_READ()
{
EEPROM_CS = 0;
spi_xmit(RDSR);
EEPROM_CS = 1;
}
Uint16 EEPROM_READ(Uint16 address)
{
int addrH,addrL,addrHL,data=0;
addrH = 0;
addrL = 0;
addrHL = 0;
addrH = (address&0xff0000)>>16;
addrHL = (address&0x00FF00)>>8;
addrL = (address&0x0000ff);
EEPROM_CS = 0;
spi_xmit(READ);
spi_xmit(addrH);
spi_xmit(addrHL);
spi_xmit(addrL);
spi_xmit(0);


data=SpiaRegs.SPIRXBUF;
EEPROM_CS = 1;
return(data);

}