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.

[参考译文] TMS570LC4357:如何刷写 UART RX 缓冲区

Guru**** 2399305 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1313494/tms570lc4357-how-to-flash-uart-rx-buffer

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

您好!

我使用 Halcogen 生成的代码处理 UART Rx 和 Tx。

我每100ms 发送一个32字节的数据、偶尔也会接收16字节的数据、并回复接收状态。

Tx 缓冲区初始化为32字节、Rx 缓冲区初始化为16字节。

接收事件由使用 sciNotification 的中断触发。  

每次我在触发中断时读取数据缓冲区后、我都要刷写 Rx 缓冲区、以便在第一帧中发生数据丢失时不会从下一帧保留数据。

示例:

我将 Rx 缓冲区大小设置为5、然后从其他应用程序发出"aa bb cc dd"、长度错误或"aa bb cc dd EE" 或"ee" 以某种方式丢失、并且下一帧"11 22 33 44 55"具有正确的长度。

我将在收到不是正确数据的5字节数据"aa bb cc dd 11"后收到中断。 在这种情况下、我要刷新整个 UART Rx 缓冲区、以便可以重新接收数据、并且错误不会传播到连续的帧。

不过、我在 Halcogen 中找不到任何用于刷新缓冲区的函数、因此我要 通过 当前使用 sciEnterResetState 重置 UART 通道来刷新它。

问题是、在我执行此操作时、传输数据会在某个时候丢失一个字节或两个字节。

因此、我必须在延迟100ms 后刷新数据、由于我将重置 UART 通道、因此必须阻止传输数据。

因此、我想看看是否有人能建议我如何在无需复位 UART 通道的情况下正确清理 UART Rx 缓冲区。

提前感谢。

这是我在 Rx 中断寄存器中的内容

这是10ms 的任务内容来处理 Rx 数据。 这还包括传输响应消息。 在此期间、会阻止100ms 循环传输。 但是、会发送32字节的确认数据。

这是我的100ms Tx 任务、我 通过复位来清除缓冲器。

这是我的缓冲器清除函数、