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.

[参考译文] CCS/TMS320F28377D:SPI 示例在等待 RX 就绪位时卡住

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/623056/ccs-tms320f28377d-spi-example-gets-stuck-while-waiting-rx-ready-bit

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

在下面经过适度修改的 SPI_loopback 示例中、代码永远不会退出 while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1){}loop。

我可以告诉代码是正确的(通过提供的示例)。  我错过了什么?

代码:

#include 
#include "F28x_Project.h"

void SPI_Fifo_init (void);
void SPI_xmit (uint16 a);
void error (void);

void main (void)
{
InitSysCtrl();

InitSpiaGpio();

Dint;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

uint16 RDATA、sData = 0x0000;

while (1)
{
SPI_xmit (sData);

while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1)
{
PUT ("等待 RX 位");
}

RDATA = SpiaRegs.SPIRXBUF;

if (RDATA!= sData)
{
PUT ("错误");
}

PUT ("无错误");

sData++;
}
}

void SPI_Fifo_init()
{
//初始化 SPI FIFO 寄存器
SpiaRegs.SPIFFTX.ALL = 0xE040;
SpiaRegs.SPIFFRX.ALL = 0x2044;
SpiaRegs.SPIFFCT.all = 0x0;

//初始化内核 SPI 寄存器
InitSpi();
}

void 错误(void)
{
asm ("ESTOP0"); //测试失败!! 停下来!
对于(;;);
}

void SPI_xmit (uint16 a)
{
SpiaRegs.SPITXBUF = A;
} 

好的、

Graham

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Graham、

    您在哪里调用 SPI_Fifo_init()?

    此致、
    Kris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Kris Parrent ]您好、Graham、

    您在哪里调用 SPI_Fifo_init()?

    此致、
    Kris

    [/报价]

    谢谢 Kris!  

    这就是诀窍。  我必须无意中删除这行代码。

    非常感谢您的帮助、您查看了代码而不是向我指出了文档。  在学习曲线的陡峭端、很容易错过一些简单的东西。

    好的、

    Graham

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    格雷厄姆

    很高兴我能提供帮助! 我很确定我们之前已经完成了:)

    请告诉我们我们是否还有任何其他可以帮助的事情。

    此致、
    Kris