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.

TMS320F28377D: SPI全双工通讯收发异常

Part Number: TMS320F28377D

我想使用四线制SPI(STE、CLK、O、I)的FIFO实现两个28377D之间的全双工通讯,但是两个板子接收到的数据均不是我发送的,我使用示波器进行了检查,发现master发出的信号是正常的slave发出的信号是异常的,它将master发过来的一些数据又发送了回去,导致两者接收都存在异常。

我的程序逻辑如下:主机使用CPUTimer做计数器触发SPI读写,从机用FIFOInterrupt触发来实现SPI读写初始化程序与中断程序如下:

其中SPIA是从机,SPIB是主机。

我个人的理解是SPIA接收到的数据进入DAT寄存器后没有进入RXBUF反而又被发了出来导致整个程序紊乱,我想知道有没有什么方法可以改善这种情况,期待您能回复

  • 可以先单独对两个板子的收发功能测试一下。

  • 我对两个板子进行了测试,发现无论哪个做master,只要是从master发送数据到slave,就没有问题。

    但如果是master 发送数据激活slave的中断函数,然后slave向master发送数据就会出现上述现象。

    具体表现形式为:

    master发送数据:1 F FF FFF FFFF FFFF(6个16位数据)

    我期望slave发送的数据为:123 124 125 126 127 128(6个16位数据)

    但实际上我测得的有时候slave发送数据为:123 1 124 125 126 127 (6个16位数据)

    且这一过程不稳定,有时会是123-128,有时回是123-1 -124-127,其中正确的比例大概占30%

    我在从机的Debug模式下对从机接收数据后的RxFIFOstatus状态进行了读取,发现有时后读取值会变成5有时会变成6,这说明那个1确实没有被读取到RxBuf中,反而直接从DAT寄存器中发送出去了。

    这是主机程序:

     这是SPImaster的初始化过程

     这是主机的发送程序,我通过一个定时器定时触发该程序,通过delay实现发送接收

    这是从机程序:

     这是SPIslave的初始化程序

     这是SPIslave的接收中断程序,同样的使用delay来实现接收与发送的配对。

    很高兴您能回复我的问题,期待您的解答

  • 我查看下相关资料后回复您

  • 期待您的回复

  • 感谢您的回复,我找到问题了,我连接两块开发板的线束出来问题,在自测的时候我用的是其他线束,所以检查出来硬件没有问题,感谢您的帮助。

  • 好的,问题解决就好