gpt4 book ai didi

linux - UART - 在轮询模式下使用 FIFO

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:30 26 4
gpt4 key购买 nike

好的,据我了解,在轮询模式下,我需要不断检查 UART 寄存器以接收和发送字符。我已经完成了,下一步是处理 FIFO。我启用了它并且没有影响读/写操作,一切仍然像以前一样工作。

目前我没有使用中断。

为了专门利用 FIFO 模式而不是仅仅探测 TX 和 RX 寄存器,我需要做什么?

在我看来,在轮询中,有 FIFO 或没有 FIFO 没有什么区别,至少在波特率为 1200 时是这样。

最佳答案

轮询 FIFO 与轮询非 FIFO 的想法:

1) 对于输入和输出,您可能有 IsXmitFull() 和 IsRcvNotEmpty() 例程。使用这些函数的否定时要小心。

// Say you want to test is all the data is transmitted
if (!IsXmitFull()) { // This is OK in non-FIFO poling, but not in FIFO polling.
// You need a new `ISXmitEmpty()` function. This function not only tests if the shift register is empty but also the FIFO.

2) 如果您使用 RS-485(共享发送/接收线路),则在更改总线方向之前需要注意 FIFO 导致的更大延迟。

3) 当您收到错误时,您的纠正措施(重置 PIC 的 UART?)往往会影响更多数据 - 例如丢失有问题的字节以及接下来的 1、2 或 3 个字节。

4) 如果您进入低功耗/时钟速度模式,请观察 FIFO 的延迟。 (在减慢时钟速度之前,请确保所有数据均已输出。)

5) 如果您使用 XON/XOFF 握手,请再次注意 FIFO 增加延迟问题。

6)可能还有其他一些神秘问题,但 TTFN。

关于linux - UART - 在轮询模式下使用 FIFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com