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.

[参考译文] TMS570LS3137:用于 SPI TX 检查 RX 标志的 Halcogen 代码?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1399952/tms570ls3137-halcogen-code-for-spi-tx-checking-rx-flag

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

工具与软件:

在 spi.c 文件中的 spiTransmitData 函数上、检查是否发生传输:

      /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Hardware status bit read check" */
        while((spi->FLG & 0x00000100U) != 0x00000100U)
        {
        } /* Wait */

但是、文档显示 TX 标志应该为位9 (不是上面代码中的8)。 spnu499c 的第1355页:

此外、在函数 spiGetData 中检查同样的标志、此函数是轮询接收器、进一步看起来会指向 HalCoGen 函数中的一个严重错误。 我缺少什么吗? 有人可以向我确认、正确的方法是在此函数中将0x0100更改为0x0200吗?

我正在使用 HalCoGen 04.07.01

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

    尊敬的 Gustavo Bruno:

    实际上、这些都是特意检查 Rx 标志:

    如果您在此检查之后验证下一行、它们将读取接收缓冲区、对吧?

    实际上、SPI 是一种全双工通信、我的意思是发送和接收将并行进行。 这意味着、如果我们发送一个帧、那么我们将并行接收另一个帧。

     spiTransmitData 函数只能在轮询模式下传输数据、因此在发送帧后、它应该会读取并忽略接收到的帧。 如果我们在发送帧后没有读取接收缓冲区、那么在下一次帧传输中、我们将得到如下方突出显示的接收溢出错误:

     一旦设置了该接收溢出标志、我们就不会再发送任何数据:

    我们无需再次检查 TXINTFLAG、因为正如我们讨论过的、这是一种全双工通信、因此如果我们接收到一个帧、则意味着 DAT1寄存器中的另一个帧也会移出。

    如果您希望将接收数据也存储在其他缓冲器中、而不仅仅是读取和忽略 接收数据、那么请使用 spiTransmitAndReceiveData 函数而不是 spiTransmitData 函数  。

    在此函数中可以看到、接收数据也存储在另一个缓冲区中、而不仅仅是读取和忽略数据。

    ——
    谢谢、此致、
    Jagadish。