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-Q1:SCI -接收

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1399200/tms320f280039c-q1-sci---receive

器件型号:TMS320F280039C-Q1

工具与软件:

您好、TI 专家!

在一个场景中、我们希望通过 SCI 接收数据、但长度是可变的。 如何解决这个问题?   

是否有办法直接观察 FIFO 数据而不是缓冲器?

谢谢、此致

Raghu

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

    尊敬的 Raghu:

    "length is variable"是指接收到的每个字符中的数据量是可变的、还是每次接收到的字符数是可变的?

    要回答第二个问题、无法直接在调试器中查看 SCI FIFO、因为它们不包含在寄存器中。 我建议查看 RX 缓冲区并使用 SCIFFRX 寄存器 来查看 FIFO 中有多少个字符以及查看其他 FIFO 状态标志。

    此致、

    Delaney

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

    尊敬的 Delaney:

    每次接收时、接收到的数据量(无字符)会有所不同。  

    谢谢、此致

    Raghu

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

    尊敬的专家:  

    我们还在等待着

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

    尊敬的 Raghu:

    明白了、感谢您的澄清。 在这种情况下、我认为最好的选择是将 FIFO 级别设置为长度可以被整除的最高字节数。 假设长度为奇数、则 FIFO 级别为1。 然后、您可以在全局标志或缓冲区中存储一些不同的状态信息、以跟踪接收到的消息中的位置。

    如果接收到的长度将按已知的顺序进行、那么您 将能够采用一种更优化的方法。 您可以跟踪当前 FIFO 级别、并在每次接收后将触发级别更改为下一个接收长度。 如果在 ISR 中执行此操作、那么它应该能够对下一个 ISR 生效。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的答复。 我得到的数据从81个字符到122个字符、不是人类可以读的、而且非常不可预测、但我们不能错过任何数据、而且我会定期接收数据。  

    谢谢、此致、

    Raghu

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

    尊敬的 Raghu:

    我看到、是的、在这种情况下、由于 SCI 接收器上没有超时中断、因此您必须使用1字节(1/16) FIFO 触发电平。 此配置与禁用 FIFO 时基本相同。 在本例中、我建议保持 SCI RX ISR 非常短、并避免出现太多其他更高优先级的中断可能会阻止 SCI RX ISR、因为这两种情况都可能导致数据丢失。 您还可以启用 RXERROR 中断并在调试期间检查 SCI RX ISR 内的错误标志、以确保此设置不会发生溢出/数据丢失。

    此致、

    Delaney