团队成员:
我最近在两个设备之间进行 Modbus 通信。 我想问、当接收到的数据超过 UARTFIFO 大小时、作为从设备、我该如何处理?
我在 UART 接收中断中设置了一个接收阵列来接收数据。
在配置 UARTFIFO 之前、我使用串行端口调试助手发送帧长度为11字节的数据。 每次数组只能接收前8个字节。 最后三个数据将丢失。
---------------- 原因是 UARTFIFO 默认处于"UART_FIFO_RX4_8"模式、即每8个字节触发一次中断、因此主机发送11个字节、接收前8个字节、无法接收后3个字节、因为未触发中断。 到达
有两个方向可以解决这个问题。
一种是调整 FIFO 深度并将 UARTFIFO 设置为"UART_FIFO_RX7_8"模式、即触发中断以接收多达14个字节、然后我发送的11个字节肯定一次可以完全接收。 但是、如果我发送的数据超过14字节、数据是否会像以前一样丢失?
第二种解决方案是参考以下链接、并将 FIFO 设置为最小长度、即两个字节会触发一个中断。 但是、我调试发现、如果我发送了11个字节的数据、我将接收5个中断、而不是6次、这仍然会导致数据丢失,所以将 FIFO 设置为2、4、8、12、14字节、 我每次发送的数据必须是它们的整数倍?
链接: e2e.ti.com/.../tms320f280039c-q1-uart-rxfifo-uart-received-is-more-than-rxfifo-size
我的问题总结如下:
(__LW_AT__1)UARTFIFO 级别设置 UART_FIFO_RX1_8、UART_FIFO_RX2_8、UART_FIFO_RX4_8、UART_FIFO_RX6_8、 UART_FIFO_RX7_8。 如果设置为 UART_FIFO_RX1_8模式、则 TM4C1290NCZAD UARTFIFO 的大小为16*8位。 设置此模式的意义是每2个字节一次。 ,触发接收中断? 如果主机发送11个字节的数据并且配置为该模式、那么它是否需要触发5个或6个中断? 当我将 UARFIFO 模式设置为 UART_FIFO_RX7_8时、如果根据上述了解、每14字节触发一次接收中断、为什么在接收11个字节时可以触发中断?
(__LW_AT__2)如果发送的数据超过 UARTFIFO 大小、我们如何才能完全接收该数据帧?
(__LW_AT__3)如何配置 TM4C 以作为中断接收字节?虽然这会占用大量资源、这样一来、无论发送何种数据、都可以完全接收到。
我希望专家能耐心回答我的问题。 如果您有任何问题、请及时向我发送私人消息。 非常感谢。