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.

McBSP作为SPI功能接收问题

你好,专家。我在用McBSP作为SPI功能接收数据时, while(McbspaRegs.MFFRX.bit.RXFFST !=1 )此句不设置的话能够接收到数据(数据不对),可是如果设置上句的话就接收不到,利用的是FIFO功能,参考TI的例程

请问这是怎么回事

  • while(McbspaRegs.MFFRX.bit.RXFFST !=1的使用目的是确定McBsp中有收到数据。

    楼主用的是281x系列芯片吧,请看一下下面的McBsp的user guide,里面2.3章有说要如何设置McBsp的相关寄存器.

    www.ti.com/.../spru061d

    此外也请楼主用示波器看一下时序。

  • 你好,Forrest,我又看了usee guide,然后借了参考书也看了一下,感觉寄存器设置的没有问题啊。现在的情况是:

     McbspaRegs.MFFRX.bit.RXFFST的数值始终为16,我看guide说这是代表可用16个字,可是正常的是不是应该为0吧?我把while(McbspaRegs.MFFRX.bit.RXFFST !=1改为while(McbspaRegs.MFFRX.bit.RXFFST !=16就能接收到数据(也不正确),我现在不知道怎么办了?能帮我一下吗?谢谢!!

  • RXFFST的值为16说明已经收到了数据,SPI有时钟和极性这需要注意一下,否则收到的数据会不正确。

    while(McbspaRegs.MFFRX.bit.RXFFST ==0){};即可。你那里McBSP是主还是从?

    此外也请楼主用示波器看一下时序。

  • 我按照你说的,看它的时序了,时序现在没有问题。McBSP设为从,用来接收数据。我刚才查看寄存器McbspaRegs.MFFRX.bit.RXFFOVF_FLAG为1,即说是溢出了,是不是正常的话,此位应该为0啊?

  • 我按照你说的,看它的时序了,时序现在没有问题。McBSP设为从,用来接收数据。我刚才查看寄存器McbspaRegs.MFFRX.bit.RXFFOVF_FLAG为1,即说是溢出了,是不是正常的话,此位应该为0啊?

  • 是的应该为0.

    我写了一个小程序:)。在2812上McBSP为从,SPI为主互相通信。

  • 好的,我好好研究一下,真的谢谢啦!