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-TMS320F28377D-SPIB::8位发送和接收的 EP EP 问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1407026/tms320f28377d-ep-tms320f28377d--ep-spib-issue-with-8bit-transmit-and-receive

器件型号:TMS320F28377D-TMS320F28377D-DSP EP

工具与软件:

我们使用 TMS320F28377D-SPI 处理器通过 EP 与 ARINC 芯片通信。 芯片通过4线连接到 SPIB、SPI 配置为8位。

我们能够建立通信、而从器件 ARINC 芯片能够发送对操作码的响应。 我们可以在 SPIRXBUF 中看到器件的响应为0x0030。 但是、当我们读取变量的值时、其读数为"0"。 此外、当我们单步执行 SPI 接收代码时、数据将被分配给变量。 如果没有断点、则不会将数据分配给变量。 需要您的帮助来解决问题。

问题出在仅接收缓冲区、请参阅以下有关如何存储来自接收缓冲区的数据的代码

SPI 8位传输代码:

空洞
SPI_transmit8Bits (uint32_t base、uint8_t DATA)

uint8_t txBuffer;

txBuffer =数据;

while ((HWREGH (base + SPI_O_STS)和 SPI_STS_BUFFULL_FLAG)!= 0u)

}

HWREGH (BASE + SPI_O_TXBUF)= txBuffer;
}

SPI 8位接收代码:


uint16_t SPI_receive8Bits (uint32_t base)

uint16_t rxData = 0u;

断言(SPI_isBaseValid (base));

while ((HWREGH (BASE + SPI_O_STS)& SPI_STS_INT_FLAG)=0U)

}

rxData =(HWREGH (BASE + SPI_O_RXBUF));

return (rxData);
}

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

    您好!

    您是否使用中断来发送/接收? 由于读取 RXBUF 会清除中断标志、建议您在正常仿真器运行模式中查看 SPIRXEMU。  您能否尝试使用 RXEMU 寄存器而不是 RXBUF?  

    为了澄清、当单步执行时、你是在 RXBUF 中以及在变量中接收到正确的数据、但是当只是在没有断点/步进的情况下运行时、你不会看到正确的数据?

    您能验证您使用的是 ARINC 器件预期的正确时钟模式吗?

    此致、

    Allison