工具与软件:
您好、TI 专家!
在一个场景中、我们希望通过 SCI 接收数据、但长度是可变的。 如何解决这个问题?
是否有办法直接观察 FIFO 数据而不是缓冲器?
谢谢、此致
Raghu
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.
工具与软件:
您好、TI 专家!
在一个场景中、我们希望通过 SCI 接收数据、但长度是可变的。 如何解决这个问题?
是否有办法直接观察 FIFO 数据而不是缓冲器?
谢谢、此致
Raghu
尊敬的 Raghu:
"length is variable"是指接收到的每个字符中的数据量是可变的、还是每次接收到的字符数是可变的?
要回答第二个问题、无法直接在调试器中查看 SCI FIFO、因为它们不包含在寄存器中。 我建议查看 RX 缓冲区并使用 SCIFFRX 寄存器 来查看 FIFO 中有多少个字符以及查看其他 FIFO 状态标志。
此致、
Delaney
尊敬的 Raghu:
明白了、感谢您的澄清。 在这种情况下、我认为最好的选择是将 FIFO 级别设置为长度可以被整除的最高字节数。 假设长度为奇数、则 FIFO 级别为1。 然后、您可以在全局标志或缓冲区中存储一些不同的状态信息、以跟踪接收到的消息中的位置。
如果接收到的长度将按已知的顺序进行、那么您 将能够采用一种更优化的方法。 您可以跟踪当前 FIFO 级别、并在每次接收后将触发级别更改为下一个接收长度。 如果在 ISR 中执行此操作、那么它应该能够对下一个 ISR 生效。
此致、
Delaney
尊敬的 Raghu:
我看到、是的、在这种情况下、由于 SCI 接收器上没有超时中断、因此您必须使用1字节(1/16) FIFO 触发电平。 此配置与禁用 FIFO 时基本相同。 在本例中、我建议保持 SCI RX ISR 非常短、并避免出现太多其他更高优先级的中断可能会阻止 SCI RX ISR、因为这两种情况都可能导致数据丢失。 您还可以启用 RXERROR 中断并在调试期间检查 SCI RX ISR 内的错误标志、以确保此设置不会发生溢出/数据丢失。
此致、
Delaney