FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可以节省CPU时间。对于发送数据也一样可以把要发送的数据一起写入FIFO,串口控制器按照写入的顺序依次发送出去。

FIFO只是一个缓冲器而已,如果你的CPU没有什么别的工作或完全处理过来uart数据的话,可以用noFIFO模式,如果你的CPU有一些耗时工作要处理,可能uart数据来了很多才开始处理,这样就需要FIFO做缓冲区了。串口会设置触发等级,就是预先设置一个值,每当传输这个值的数据量就触发一次中断。比如设置8个字节,那么每传输8字节数据就会触发一次中断。

很多人停留在每收发一个字符就要中断处理一次的老思路上。UART收发FIFO主要是为了解决收发中断过于频繁而导致CPU效率不高的问题。这就是FIFO的必要性,在进行UART通信时,中断方式比轮询方式要简介且有效率。但是,如果没有收发FIFO,则每传输一个数据(5~8位)都要中断处理一次,这样中断方式,效率仍然不高。如果有了收发FIFO,则可以连续收发若干数据(可多至14个)后才产生一次中断,然后一起处理,这就大大提高了收发效率。

接收超时问题,如果没有接收超时功能,则在对方已经发送完毕而接收FIFO未满时并不会触发中断(FIFO满才会触发中断),结果造成最后接收到的有效数据得不到处理的问题。有了接收超时功能后,如果接收FIFO未满而对方送已经停止,则在不超过3个数据的接收时间内就会触发超时中断,因此数据会照常处理。

总之,FIFO的设计时优秀而合理的,它已经帮你向导了收发过程中存在的任何问题,只要初始化配置UART后,就可以放心的收发了,FIFO和中断例程会自动搞定一切。完全不必要担心FIFO大大减少了中断产生的次数而可能造成数据丢失的问题。

发送时,只要发送FIFO不满,数据只管往里连续放,放完后就直接退出发送子程序,随后,FIFO真正发送完成后会自动产生中断,通知主程序:我已经完成了真正的发送。

接收时,如果对方连续不间断发送,则填满FIFO后会以中断的方式通知主程序说:现在有一批数据来了,请处理。如果对方是间断性发送,也不要紧,当间隔时间过长(2~3个字符传输时间),也会产生中断,这次是超时中断,通知主程序说:对方可能已经发送完毕,但FIFO未满,请处理。

当然也可以软件字节定义一种缓冲区作为FIFO

【相关库函数】

1. UARTConfigSet()配置UART,例如UART2:波特率9600,数据位8,停止位1,无校验

UARTConfigSet(UART2_BASE, 9600, UART_CONFIG_WLEN_8 |UART_CONFIG_STOP_ONE |

UART_CONFIG_PAR_NONE);

2. UARTFIFOLevelSet()

  设置UART收发FIFO的深度,可以设置的深度有2、4、8、12、14

3. UARTSpaceAvail()

  确认在发送FIFO里是否有可利用的空间。

4. UARTCharsAvail()

  确认在接收FIFO里是否存在字符。

5. UARTCharPutNonBlocking()

  该函数要与UARTSpaceAvail()配合使用,如果已确认发送FIFO里有可用空间,则将字符直接放入发送FIFO,不等待。

6. UARTCharGetNonBlocking()

  该函数要与UARTCharsAvail()配合使用,如果已确认接收FIFO里有字符,则直接从接收FIFO里读取字符,不等待。

7. UARTCharPut()

  将字符放到发送FIFO里,如果没有可用空间则一直等待。

8. UARTCharGet()

  从接收FIFO里读取字符,如果没有字符则一直等待。

9. UARTIntEnable() 使能一个或多个UART中断,例如:同时使能接收中断(接收FIFO溢出)和接收超时中断

UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT);

转帖:http://blog.csdn.net/zlsh007/article/details/35367521

什么是UART中的FIFO的更多相关文章

  1. [tty与uart]UART中的硬件流控RTS与CTS

    转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...

  2. 在shell中通过fifo与服务器交互

    首先,需要说的是:1.在shell中,运行的每一个命令至少启动一个新进程,且:$$:获取当前shell的进程号(PID)$! :执行上一个指令的PID2.重定向与管道有点类似,例子:cmd1 < ...

  3. UART中的硬件流控RTS与CTS DTR DSR DTE设备和DCE设备【转】

    中低端路由器上使用disp interface 查看相应串口状态信息,其中DCD.DTR.DSR.RTS及CTS等五个状态指示分别代表什么意思? DCD ( Data Carrier Detect 数 ...

  4. UART中的硬件流控RTS与CTS【转】

    转自:http://blog.csdn.net/zeroboundary/article/details/8966586 5/23/2013 5:13:04 PM at rock-chips insh ...

  5. 网络中,FIFO、LRU、OPT这三种置换算法的缺页次数

    FIFO.LRU.OPT这三种置换算法的缺页次数 转载  由于要考计算机四级网络,这里遇到了问题,就搜了一些资料来解疑. 考虑下述页面走向: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3 ...

  6. [uart]UART中的硬件流控RTS与CTS

    转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...

  7. UART中的硬件流控RTS与CTS

    最近太忙了,没时间写对Ucos-II的移植,先将工作中容易搞错的一个知识点记录下来,关于CTS与RTS的. 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫( ...

  8. UART中RTS、CTS

    RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据. CTS (Clear ToSend,发送允许)为输入信号,用于 ...

  9. 协议中UART的两种模式 【转】

    转自:http://wjf88223.blog.163.com/blog/static/3516800120104179327286/ ^^…… 协议栈中UART有两种模式:1.中断2.DMA 对于这 ...

随机推荐

  1. (转)sl简单自定义win窗体控件

    sl简单自定义win窗体控件      相信大家接触过不少win窗体控件ChildWin子窗口就的sl自带的一个  而且网上也有很多类似的控件,而今天我和大家分享下自己制作个win窗体控件,希望对初学 ...

  2. 下拉菜单demo---参考阿里云首页顶部下拉菜单

    前言: 最近开始学习html+css,准备仿照各大网站写一些demo. 正文: 分析阶段: 如下图: 链接来自于: 阿里云:https://www.aliyun.com/ 实现过程: (一)用css3 ...

  3. JavaScript笔记 Function

    在JavaScript中方法由两部分组成: 方法名和方法体. JavaScript中的方法跟其他传统面向对象语言不同,它跟普通的变量没有区别,唯一不同点是它是Function对象,因此它会有一些Fun ...

  4. C语言 05 数组

    数组作为函数参数,可以省略元素个数. 数组作为函数参数,传递是整个数组的地址,修改函数形参数组的值,会影响到外面的 实参数组. 基本数据类型作为函数参数,传递是数值.

  5. js数组中indexOf/filter/forEach/map/reduce详解

    今天在网上看到一篇帖子,如题: 出处:前端开发博客 (http://caibaojian.com/5-array-methods.html) 在ES5中一共有9个Array方法,分别是: Array. ...

  6. style设置/获取样式的问题 和 offsetWidth/offsetHeight的问题

    style设置/获取样式的问题:1.js通过style方法    --加样式:加的是行间样式 oDiv.style.width="20"+'px';    --取样式:取得是行间样 ...

  7. iis发布后,未能找到编译器可执行文件 csc.exe

    iis 未能找到编译器可执行文件 csc.exe在一台新安装完的Windows Server 2003上,打上Framework 3.5,配置好WebService的IIS,结果浏览时出现:未找到编译 ...

  8. iOS去除导航栏和tabbar的1px横线

    1.在自己定义的导航栏中或者设计稿中经常需要去除导航栏的1px横线,主要是颜色太不协调了 去除之前的图片 要去除这1px的横线,首先应该知道它是什么,在Xcode的界面调试中可以看到,它其实是UIIm ...

  9. Android 网络开发之WIFI

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...

  10. mac安装 Vitual box 虚拟机(window8.1)

    首先到Oracle官网下载oracle VM VB,这是一个开源的免费项目,如果你想要了解更多的话甚至可以下载它的source code http://www.oracle.com/technetwo ...