器件型号: CC3551E
您好的团队、
我们遇到了 UART 驱动程序的问题、即观察到的行为与我们对文档的理解不完全一致。
相关文档:
在 UART2_ReadReturnMode_Partial 中、UART2_READ () 将阻止、直到接收到请求的字节数或发生 UART 硬件读取超时。
...
如果读取返回模式为 UART2_ReadReturnMode_Partial、则 UART2_READ () 会在读取所有数据之前返回 、如果已接收到某些数据、但接收已处于非活动状态足够长的时间、导致硬件读取超时发生(例如,在 32 位周期内)。
我们观察到、对于特定的读取模式、驱动程序环缓冲区可能包含数据(如 UART2_getRxCount 所示)、但 UART2_read() UART2_Mode_BLOCKING UART2_ReadReturnMode_PARTIAL 始终调用 IN + MODE 块(或直到新数据通过串行线路进入)。 我们对文档(以及驱动程序声称模仿的 POSIX 行为)的解释是、此类读取会立即返回环缓冲区中的可用数据。
我们可能能够解决应用程序代码中的当前行为,但与直接修复驱动程序行为相比,这可能不太可靠。
重现此问题的步骤如下:
- 启用硬件流控制
- 激活 RX 环缓冲区(大小)
R - 向 size 个
1.5 * R字节的器件发送数据突发 -
UART2_read()具有目标缓冲区大小的调用R- 此处按预期返回 R 字节
-
UART2_read()R再次调用目标缓冲区大小- 此调用将永远阻止
- 我们期望它返回
R / 2字节
您对此修复有何评论?
此致、
Luke
