ADS114S08 通过SPI读不到寄存器的值

最近在调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;
   }

原理图如下:

5 个回复