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.

C2000 SPI 接收与发送问题

Other Parts Discussed in Thread: TMS320F28020

Hi,

小弟使用的芯片是TMS320F28020,并使用两块板子,一块是当PI Master,一块是当SPI Slave,Master在发送数据都正常,就Slave在发送数据会看到Master自己发的数据,如下图,目前不知道是什麽原因

Master FIFO配置:

SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI

SpiaRegs.***.all=0x001F; //16-bit character, Loopback mode
SpiaRegs.***.bit.SPILBK = 0;
SpiaRegs.***.all=0x0017; //Interrupt enabled, Master/Slave XMIT enabled
SpiaRegs.***.bit.MASTER_SLAVE = 1; //0=slave 1=master
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR=0x007F; // Baud rate
SpiaRegs.SPIFFTX.all=0xC002; // Enable FIFO's, set TX FIFO level to 2
SpiaRegs.SPIFFRX.all=0x0002; // Set RX FIFO level to 2
SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;

SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI

SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;

===========================================================

Slave配置:

SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI

SpiaRegs.***.all=0x001F; //16-bit character, Loopback mode
SpiaRegs.***.bit.SPILBK = 0; //SPI loop back mode disabled
SpiaRegs.***.all=0x0017; //Interrupt enabled, Master/Slave XMIT enabled
SpiaRegs.***.bit.MASTER_SLAVE = 0; //0=slave 1=master
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR=0x007F; // Baud rate
SpiaRegs.SPIFFTX.all=0xC002; // Enable FIFO's, set TX FIFO level to 2
SpiaRegs.SPIFFRX.all=0x0022; // Set RX FIFO level to 2
SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;

SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI

SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;

===========================================================

SPI Slave程序做法:当SpiRx_Isr发生中断,会先接收FIFO内的数据,之前在shift tx_data数据到SPI TX FIFO内。

SpiRx_Isr{

rx_data[0]  = SPITXBUF ;
rx_data[1]  = SPITXBUF ;

SPITXBUF = tx_data[0] ;
SPITXBUF = tx_data[1] ;

}

===========================================================

SPI Master程序做法:类似在main while内一写重复发送0xAAAA的数据给Slave而已

main()
{
   while(1)
   {
      SpiaRegs.SPITXBUF = 0xAAAA;
      while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }
      u16_Count[0] = SpiaRegs.SPIRXBUF;
   }
}