FIFO的作用

UART Receive FIFO and Receive Timeout

为什么UART要有FIFO?

现代的CPU运转速度越来越快。UART的波特率通常达不到10M,在没有FIFO的情况下。每次填充数据给UART 或者 从UART取数据都会占用CPU的时间。这是极大的浪费。

因而UART在硬件上设置了FIFO用作数据发送和接受的缓冲区。

每次CPU要填充数据,把数据填充到UART的TX FIFO里面去了,每次CPU要取数据,从UART的RX FIFO把数据取出来。总之。FIFO作为缓冲区的存在减轻了CPU的负担。

有了FIFO后RX对数据的处理是如何的?

一般而言,当RX FIFO 接受到数据达到 RX FIFO设置的触发级别时。产生一个中断给CPU,CPU进入中断处理函数将数据取出来。考虑到这种一种情况,假设有一次传输的数据不是RX FIFO触发级别的整数倍的时候。就会造成最后的那部分数据够不到RX FIFO的触发级别。怎么办,RX FIFO的这部分数据还能取出来吗?

以下考虑两种方法:

1, 将RX FIFO触发级别设置成1。这样每次RX FIFO接受到一个数据就会触发一个中断,不可能存在RX FIFO的数据不够触发级别的情况,因而仅仅要RX FIFO中仅仅要有数据,CPU都能知道并能进行对应的处理。可是这样和没有FIFO差别大吗?非常小。CPU的负载太重。每接受一个数据都会产生一个中断。

2,设置RX timeout中断,通过使能该中断,并设置一个timeout值用以确定自从上次接受到数据为止的多长时间里面再也接受不到数据的时候产生RX timeout中断。

眼下我们公司的UART的RX timeout中断应该有些问题,使能timeout中断后,在UART没有接受到不论什么数据的时候,它依旧以一定的时间产生这个timeout中断,这是不正常的。

猜你喜欢

转载自blog.csdn.net/vincent3678/article/details/108632332