UART中的接收/发送FIFO与数据寄存器

时间:2016-12-03 15:10:17

标签: embedded

请告诉我接收/发送FIFO和UART中的数据寄存器有什么区别?

这是我第一次为UART开发驱动程序代码,所以我第一次遇到这个问题。我真的无法理解其中的区别。请帮帮我!

2 个答案:

答案 0 :(得分:2)

UART中的FIFO(先进先出)缓冲区是硬件实现的接收或传输数据队列。您不直接访问FIFO,而是读取或写入数据寄存器,并自动从队列头部读取或写入此数据。

FIFO可以提高链路效率,因为它允许软件数据读/写时序发生变化,同时保持物理链路上的流数据。

当FIFO被禁用或没有FIFO的UART时,只有两个字节的缓冲 - 移位寄存器和数据寄存器。对于输入数据,如果软件在接收到新数据之前没有及时读取数据寄存器,则会被覆盖,数据将丢失。同样对于传输,如果数据写入速度不如传输速度快,则可能无法实现链路的全部带宽和效率。

enter image description here

FIFO可能在没有确定性实时性能的系统上最有用,因为可能无法保证及时维护UART(例如运行通用操作系统的Desjktop PC,例如Windows),但是在使用缓冲中断驱动的串行I / O的嵌入式系统中,在许多情况下,FIFO对于低到中等数据速率可能不是完全必需的。在微控制器上,缺少FIFO的UARTS通常支持DMA,这可以更有效地管理大型流数据突发。

答案 1 :(得分:0)

一旦写入发送数据寄存器,该字节将进入发送FIFO,它将保持在那里直到物理线路准备好发送。

arround的另一种方式是相同的,数据来自物理线路并进入接收FIFO,等待用户代码通过读取接收数据寄存器来收集它。