2016-12-03 238 views
0

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

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

+0

嗨,欢迎来到Stackoverflow。这个地方不是一个代码工厂。请提供您的问题示例代码或您认为将工作,什么不工作。如果你先做了一些工作,人们就会更容易帮忙。同时添加更多相关标签,让您的问题覆盖更多可能帮助您的用户。 – Starlord

+0

当询问外设(如UART)中的特定寄存器时,指定硬件平台非常有用,因为不同设备使用的寄存器有很大的差异。 –

回答

0

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

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

2

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

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

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

enter image description here

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