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.

[参考译文] TMS320F28388D:SCI RX 字符串长于 16 字节一些字符串丢失

Guru**** 2492385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1557629/tms320f28388d-sci-rx-strings-longer-than-16-bytes-some-chars-a-re-getting-lost

器件型号:TMS320F28388D


工具/软件:

您好:

Im 尝试使用波特率为 892857 的 SCI、我使用 RX 中断来填充来自 RXFIFO 的循环缓冲区。我定义的 RXFIFO 大小为 16。

我正在传输此字符串:“abcdefghijklmnopqrstuvwxyz",“,它、它是一个 26 长度的字符串。

中断会跳转、在中断内部、我将 16 个字节复制到循环缓冲区。

我可以看到前 16 个字节被复制、但其余字节正在丢失。

如果我将所有字节一起发送、是否可以捕获这些字节? 还是每次只能处理 16 字节的字符串?

在这种情况下的大小是 26 所以它将是 16 然后 10 和 10 不会触发中断,但我也尝试使用一个 32 长度的数组,它不能正常工作...  那么、我会问、中断是否可能发生两次、以及是否可以将 FIFO 复制到循环缓冲器? 还是会丢失前 16 个字节之外的其余数据?

谢谢

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

    您好:

    最简单的问题解决方案是在 ISR 中使用内置的 SCI_readCharArray (); driverlib 函数。 根据您对问题的描述、这是否不起作用?

    此致、
    Jason Osborn

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

    谢谢我找到了问题所在。

    实际上我不使用 SCI_readCharArray () 函数,因为我还需要更新非循环缓冲区。我在 A 中的一个字节后读取它,以便从 0-16 回退。

    我使用 SCI_readCharNonBlocking () 函数。

    无论如何,问题是因为在代码中,我使用的 SCI 的 init sequencr 并不完全像在 exmaples 代码中,因为某种原因,他们使用了  

    SCI_enableInterrupt (SCIA_BASE、(SCI_INTRXFF | SCI_INT_RXERR))

    在中断结束时、他们清除了 SCI_INT_RXERR

    当我删除这些线条时、问题得到解决、第二次突发也出现了。

    我不知道为什么会发生这种情况、但这解决了问题。

    谢谢