zxq6 发表于 2018-11-13 15:19:54

28335的spi,配置成从模式后,没法发送数据

我使用的是spia,配置为从模式,使用的是这几个引脚。
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1;

从主机往f28335发送数据,从机这边能够正确的收到数据。

但是从机在中断里面使用如下语句,往主机回数据会出现问题:
__interrupt void
spiRxFifoIsr(void)
{
rdata=SpiaRegs.SPIRXBUF&0xff;
idx++;
SpiaRegs.SPITXBUF='R';
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; // Clear Overflow flag
SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ack
}

主机一次发送的8byte数据,理论上miso信号线上会有波形。但是实测却没有。导致主机收不到任何数据。

FIFO初始化代码如下:

//
// spi_fifo_init -
//
void
spi_fifo_init()
{
//
// Initialize SPI FIFO registers
//
SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI

SpiaRegs.SPICCR.bit.SPICHAR=7; //数据宽度
SpiaRegs.SPICCR.bit.CLKPOLARITY=0; //时钟极性

SpiaRegs.SPICTL.bit.SPIINTENA=1;
SpiaRegs.SPICTL.bit.MASTER_SLAVE=0;
SpiaRegs.SPICTL.bit.TALK=1;
SpiaRegs.SPICTL.bit.CLK_PHASE=1; //时钟相位
SpiaRegs.SPICTL.bit.OVERRUNINTENA=1;

SpiaRegs.SPISTS.all=0x0000;

SpiaRegs.SPIFFTX.bit.SPIRST=1;
SpiaRegs.SPIFFTX.bit.TXFFIL=8;
SpiaRegs.SPIFFTX.bit.TXFFIENA=0;
SpiaRegs.SPIFFTX.bit.SPIFFENA=1;
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;

SpiaRegs.SPIFFRX.bit.RXFFIL=1;
SpiaRegs.SPIFFRX.bit.RXFFIENA=1;
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;

SpiaRegs.SPIPRI.all=0;
SpiaRegs.SPIPRI.bit.FREE = 1; // 11 mode -
SpiaRegs.SPIPRI.bit.SOFT = 1; // 11 mode -

SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
}


IO的初始化应该没问题的,因为我将cpu暂停,这个时候可以从miso获取到跟mosi延迟一个byte的数据。

请各位帮忙看看,我这个问题出自哪里?谢谢!

596142041 发表于 2018-11-20 11:30:38

从机你发送数据时钟是由谁提供呢?要发送数据不是应该是主机才能进行发送数据么?

zxq6 发表于 2018-11-20 13:15:59

596142041 发表于 2018-11-20 11:30
从机你发送数据时钟是由谁提供呢?要发送数据不是应该是主机才能进行发送数据么? ...

是的,主机提供的时钟,示波器测sck,mosi,cs都有信号,miso没有。

596142041 发表于 2018-11-20 15:40:07

zxq6 发表于 2018-11-20 13:15
是的,主机提供的时钟,示波器测sck,mosi,cs都有信号,miso没有。

你是指当主机给28335发送数据时,MISO上面是没数据是不?

596142041 发表于 2018-11-20 15:52:41

在手册中有如此描述:If data is to be transmitted by the slave simultaneously, and SPITXBUF has not been previously loaded, the data must be written to SPITXBUF or SPITXBUF before the beginning of the SPICLK signal.我的理解是:是不是应该在主机发送数据之前就应该将需要反馈给主机的数据写入到SPITXBUF或者SPITXBUF 寄存器中

zxq6 发表于 2018-11-20 17:18:54

596142041 发表于 2018-11-20 15:52
在手册中有如此描述:If data is to be transmitted by the slave simultaneously, and SPITXBUF has not be ...

是的,嗯,就算是需要提前加载,那么,我主机连续发送多个数据,总会收到一个吧?
页: [1]
查看完整版本: 28335的spi,配置成从模式后,没法发送数据