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: 串口中断在特定情况下无法获取数据长度

Part Number: TMS320F28388D


我使用接收串口中断来获取数据,其中RX的FIFO等级为7/8. 同时也开启了timeout中断。在正常情况下,数据接收都是正常的,并且我可以通过在中断中增加一个计数器,当timeout中断来了后就可以记录数据包长度。但是当数据包长度为14的倍数时,在最后一个字节接收完后,只触发RX接收中断,而不触发timeout RT中断,这样我就无法判断数据是否接收完毕导致无法知道数据包长度了。。

请问有什么方法可以解决这个问题吗?

  • 并且我可以通过在中断中增加一个计数器,当timeout中断来了后就可以记录数据包长度。

    能详细解释一下这里吗?

    在FIFO中存在数据、并且超过一个设定的周期后仍没有新的数据进入FIFO时,time-out中断被触发。

    所以并不是很理解这里如何记录数据包的长度。

  • 这个是我手动加的功能,比如其他设备给你发了50个bit的数据,UART将会触发三次RX中断和一次timeout中断。每读一个byte我的cnt就加一,当timeout触发,我就认为cnt值就是数据包长度。这样就能记录最终长度50
    但是当其他设备给我发了28个bit,在FIFO第二次达到14个bit触发条件之后,它只触发RX中断,不会触发timeout中断。由于我现在的应用场景作为接收方不知道即将收到多少数据,所以我不能用RX中断来判断当前数据是否结束,我只能通过timeout中断来判断。现在timeout不会触发导致我不知道当前一帧数据包有多少个bit。

  • 在FIFO第二次达到14个bit触发条件之后,它只触发RX中断,不会触发timeout中断。

    第二次Rx FIFO中断中,数据被读出,也就是说Rx FIFO被清空,time-out中断就不会被触发。