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.
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;
}
}