什么是UART中的FIFO
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的更多相关文章
- [tty与uart]UART中的硬件流控RTS与CTS
转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...
- 在shell中通过fifo与服务器交互
首先,需要说的是:1.在shell中,运行的每一个命令至少启动一个新进程,且:$$:获取当前shell的进程号(PID)$! :执行上一个指令的PID2.重定向与管道有点类似,例子:cmd1 < ...
- UART中的硬件流控RTS与CTS DTR DSR DTE设备和DCE设备【转】
中低端路由器上使用disp interface 查看相应串口状态信息,其中DCD.DTR.DSR.RTS及CTS等五个状态指示分别代表什么意思? DCD ( Data Carrier Detect 数 ...
- UART中的硬件流控RTS与CTS【转】
转自:http://blog.csdn.net/zeroboundary/article/details/8966586 5/23/2013 5:13:04 PM at rock-chips insh ...
- 网络中,FIFO、LRU、OPT这三种置换算法的缺页次数
FIFO.LRU.OPT这三种置换算法的缺页次数 转载 由于要考计算机四级网络,这里遇到了问题,就搜了一些资料来解疑. 考虑下述页面走向: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3 ...
- [uart]UART中的硬件流控RTS与CTS
转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...
- UART中的硬件流控RTS与CTS
最近太忙了,没时间写对Ucos-II的移植,先将工作中容易搞错的一个知识点记录下来,关于CTS与RTS的. 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫( ...
- UART中RTS、CTS
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据. CTS (Clear ToSend,发送允许)为输入信号,用于 ...
- 协议中UART的两种模式 【转】
转自:http://wjf88223.blog.163.com/blog/static/3516800120104179327286/ ^^…… 协议栈中UART有两种模式:1.中断2.DMA 对于这 ...
随机推荐
- 移动设备如何打开RMS加密的文档
关键字:RMS. AZure RMS.IPhone.Android.Office365.Sharepoint.Exchange 最近总是碰到要求用苹果手机及安卓手机阅读RMS加密文档的需求,经过查找相 ...
- 误用的volatile
在嵌入式编程中,有对某地址重复读取两次的操作,如地址映射IO.但如果编译器直接处理p[0] = *a; p[1] = *a这种操作时,往往会忽略后一个,而直接使用前一个已计算的结果.这是有问题的,因为 ...
- vs加js引用
今天又有一个同事问我“在VS中如何让一个JS文件智能提示另一个JS文件中的成员”,他说Google了一下,并没有找到答案,然后我把这个小技巧贴出来,希望能被Google到. 有时候会有这种情况:当我的 ...
- Lucene.net应用
1.加入盘古分词方法 /// <summary> /// 对输入的搜索的条件进行分词 /// </summary> /// <param name="str&q ...
- VTID配置
车牌过滤: [FilterByHour] text=${Channel},${Plate.type},${Frame.Time(%H)} all=true rule01= ^$,^$,^[]$ =&g ...
- Cocosd-x的坐标系
OpenGL 坐标系 : 原点在屏幕左下角,x 轴向右,y 轴向上. UI坐标体系 : 原点在屏幕左上角,x 轴向右,y 轴向下. 屏幕坐标系: UI 世界坐标系: 也叫绝 ...
- asp.net type=file在上传图片到服务器
前台 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> ...
- java split进行字符串分割
在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1.如果用"."作为分隔的话,必须是如下写法,Str ...
- I2S/PCM/IOM-2、I2C/SPI/UART/GPIO/slimbus
概述 I2S,PCM,IOM-2都是数字音频接口,传数据的. I2C,SPI,UART,GPIO是控制接口,传控制信令的. I2S I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频 ...
- [转载]LazyWriter(惰性写入器) 进程的作用
Q:What Does the LazyWriter Process Do? The LazyWriter process is a periodic process that checks th ...