最近在调ADS114S08,芯片用的DSP28335,,两个器件的用SPI通信,DSP28335作主机,ADS114S08作从机,根据手册上先发reset指令,然后用RREG指令去读STATUS寄存器值,但是读出来的值一直为0x00(应该是0x80),观察了SPIDAT的值,可以看出数据发出去了(测试的时候发送前0x21FF,发送完变成0xFF),换着读另外的寄存器,结果也一样。查了ADS114S08的供电以及与DSP28335DE SPI连接都是好的,请教社区的各位大神,这是什么原因?如果有例程麻烦提供一下,谢谢各位了
代码如下:
spi configuration:
SpiaRegs.***.bit.SPISWRESET = 0;
SpiaRegs.***.bit.CLK_PHASE = 1; //CPHA = 1
SpiaRegs.***.bit.MASTER_SLAVE = 1;
SpiaRegs.***.bit.OVERRUNINTENA = 0;
SpiaRegs.***.bit.SPIINTENA = 0;
SpiaRegs.***.bit.TALK = 1;
SpiaRegs.SPIBRR =0x0004; // LSPCLK = SYSCLKOUT/10 15Mhz 波特率 15Mhz/5=3Mhz
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.***.bit.CLKPOLARITY = 0; // CPOL = 0
SpiaRegs.***.bit.SPILBK = 0;
SpiaRegs.***.bit.*** = 7;
SpiaRegs.SPIPRI.bit.FREE = 1;
SpiaRegs.***.bit.SPISWRESET = 1;
void main(void)
{
InitSysCtrl();
InitSpiaGpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
//spi_fifo_init(); // Initialize the Spi FIFO
spi_init(); // init SPI
adres_H = 0;
adres_L = 0;
adres = 0;
rdata = 0;
sdata = 0;
CS_L;
DELAY_US(1);
rdata = spi_8bit(0x2000); // reset command
DELAY_US(2000); // 4096*tclk
CS_H;
DELAY_US(1);
CS_L;
DELAY_US(1);
rdata = spi_8bit(0x2100);
DELAY_US(1);
rdata = spi_8bit(0x0000);
DELAY_US(1);
rdata = spi_8bit(0x0000);
DELAY_US(1);
CS_H;
Uint16 spi_8bit(Uint16 a)
{
Uint16 data;
SpiaRegs.SPITXBUF=a;
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1)
{
}
data = SpiaRegs.SPIRXBUF;
return data;
}
原理图如下: