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.

[参考译文] TMS320F280039C:接收动态长度 SCI 数据的建议方法是什么?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1388948/tms320f280039c-what-is-the-recommended-way-to-receive-dynamic-length-sci-data

器件型号:TMS320F280039C

工具与软件:

您好!

有人可以给我一些关于如何接收动态长度的 SCI 数据(可以从1字节到超过16字节)的提示吗?
由于 SCI 通信是较大的时序关键型固件的一部分、因此不能选择轮询 FIFO。


以下是我尝试的东西、所有这些都启用了 RX 中断。 禁用环回功能。 使用终端应用将数据发送到 MCU。

1.无 FIFO 使用 while

使用它从 ISR 接收数据

INT I = 0;

while (SCI_isDataAvailableNonFIFO (UartUplink_BASE)){
UART_rxdata[i]= SCI_readCharNonBlocking (UartUplink_BASE);
I++;
}
结果:
如果发送的数据长度为1字节、则表示已正确接收。 如果大于1字节、则仅接收第一个数据。

2.没有 while 的 FIFO

在 ISR 外部、有一个计数器 var 来增加数据接收。

使用它从 ISR 接收数据

静态 cnt;
UART_rxdata[cnt]= SCI_readCharNonBlocking (UartUplink_base);
CNT++;
//处理程序在此处循环接收缓冲区

结果:
如果发送的数据长度为1字节、则表示已正确接收。 如果多于1字节、则 ISR 第一个接收到的数据是正确的、第二个接收到的字节是错误的。 无论发送数据的长度如何、都只接收到2个字节。

3.带有 RX 1/16满中断的 FIFO

使用它从 ISR 接收数据

UART_rxnum = SCI_getRxFIFOStatus (UartUplink_BASE);
SCI_readCharArray (UartUplink_BASE、uart_rxdata、uart_rxnum);

结果:
如果发送的数据长度为1字节、则表示已正确接收。 如果超过1字节、则无论发送数据的长度如何、ISR 都会被调用两次。 第一个 ISR 调用正确接收第一个字节、第二个 ISR 调用接收错误的第二个字节。 后续字节完全不会接收到。

4、FIFO 与 RX 16/16满中断

UART_rxnum = SCI_getRxFIFOStatus (UartUplink_BASE);
SCI_readCharArray (UartUplink_BASE、uart_rxdata、uart_rxnum);

结果:
如果发送的数据恰好填满 FIFO、那么它会被正确接收。 如果发送的数据超过缓冲区、则前16个字节被正确接收、但下一个16字节接收将是错误的。 在缓冲区已满之前不会接收数据。


上述任何行为都不可取、尤其是当所有行为都可能破坏 所接收到的数据时。
在 C2000芯片上接收可变长度 SCI 数据的建议方式是什么?
如果上述行为看起来异常、是否有人可以就我可能做错了什么给出建议?
谢谢你。

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

    尊敬的 Fuad:

    我建议使用 FIFO 模式、FIFO 级别为1、但使用 readChar 函数而不是 readArray 函数。

    谢谢!

    Luke

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

    非常感谢! 这表示工作正常。 数据未损坏。

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

    好极了、很高兴这个解决方案为您效劳。

    ——路加