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

fifo只是一个缓冲器而已如果你的cpu没什么别的工作或完全处理的过来uart数据的话,可以用nonfifo模式如果你的cpu有一些耗时的工作要处理,也许uart数据来了很多才开始处理,这样就需要fifo做缓冲了。

串口设置的触发等级,就是预先设定的一个值。每当传输了这个值的数据量就触发一次中断。比如设置了8字节,那么每传8字节数据就会触发一次中断了。

看来许多人还没有真正理解FIFO的作用和优点,仍然停留在每收发一个字符就要中断处理一次的老思路上。UART收发FIFO主要是为了解决收发中断过于频繁而导致的CPU效率不高的问题。

  FIFO的必要性。在进行UART通信时,中断方式比轮询方式要简便且效率高。但是,如果没有收发FIFO,则每传输一个数据(5~8位)都要中断处理一次,效率仍然不高。如果有了收发FIFO,则可以在连续收发若干个数据(可多至14个)后才产生一次中断,然后一起处理。这就大大提高了收发效率。

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

  总之,FIFO的设计是优秀而合理的,它已经帮你想到了收发过程中存在的任何问题,只要初始化配置UART后,就可以放心收发了,FIFO和中断例程会自动搞定一切!

  完全不必要担心FIFO大大减少了中断产生的次数而“可能”造成数据丢失的问题!

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

  接收时,如果对方是连续不间断发送,则填满FIFO后会以中断的方式通知主程序说:现在有一批数据来了,请处理。

  如果对方是间断性发送,也不要紧,当间隔时间过长时(2~3个字符传输时间),也会产生中断,这次是超时中断,通知主程序说:对方可能已经发送完毕,但FIFO未满,也请处理。

点击打开链接

什么是UART中的FIFO ?相关推荐

  1. LPS25HB 气压计 参考手册中关于FIFO功能的解读

    文章目录 LPS25HB 气压计 参考手册中关于FIFO功能的解读 FIFO 普通模式 FIFO Stream 模式 Stream-to-FIFO 模式 Bypass-to-Stream 模式 FIF ...

  2. STM32:UART中的硬件流控RTS与CTS

    UART中的硬件流控RTS与CTS 最近太忙了,没时间写对Ucos-II的移植,先将工作中容易搞错的一个知识点记录下来,关于CTS与RTS的. 在RS232中本来CTS 与RTS 有明确的意义,但自从 ...

  3. uart中:起始位,停止位,就校验位,数据位,数据位的位数,波特率,数据通讯的接口定义

    UART简介  通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.UART通信在工作中相当常见,项目中需要生成uart信号 ...

  4. TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错

    TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错 1.首先到官网下载程序 很多时候我们用twincat不具备硬件条件,需要用到虚轴进行测试,但是对于初学者来说,用twi ...

  5. 【vivado IP核】第2篇:VIVADO IP库中的FIFO已满继续写入数据会怎样

    1 前言 1.1 声明 本文依据个人试验及工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 1.2 内容概要 本文主要讲述vivado ip库中FIFO Generat ...

  6. 怎样在设计中添加FIFO宏模块

    quartus软件内置了很多我们经常用到的电路模块,统称为宏模块,在做EDA设计的时候,我们可以直接调用他们来简化设计过程.不要小看了宏模块,如果利用得当,可以省去你一多半的设计时间呢.这里以FIFO ...

  7. 串口驱动中使用FIFO

    FIFO是什么? FIFO( First Input First Output) 简单说就是指先进先出.它是一种数据存储或传输模式,可以硬件实现也可以软件实现,大多数用来缓存数据,减少操作次数,提高传 ...

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

    在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫(SmartModem)后就有点混淆了,不过现在这种意义为主流意义的,各大芯片制造厂家对UART控制器的流控基 ...

  9. fifo java_java – 如何保证ThreadPoolExecutor中的FIFO执行顺序

    我用这行代码创建一个ThreadPoolExecutor: private ExecutorService executor = new ThreadPoolExecutor(5, 10, 120, ...

最新文章

  1. python爬虫原理-python学习之python爬虫原理
  2. 【CentOS Linux 7】【gcc编译器】
  3. java代码中加log_Java LogManager addLogger()用法及代码示例
  4. 奥巴马经济顾问:哪怕丢了“饭碗”,也必须加大投资AI!
  5. Redis实现之对象(三)
  6. bootstarp js设置列隐藏_Bootstrap框架----DataTables列表移动端适配定义隐藏列
  7. nodejs调用google翻译api
  8. 虚拟机opnsense作为dhcp服务器,在OPNsense中,通过主机名或域名访问内部设备
  9. 五个顶级的大数据架构
  10. BMS 中的安规设计
  11. 开题报告:基于java医院在线预约挂号系统 毕业设计论文开题报告模板
  12. 自然语言处理中的迁移学习(上)
  13. 绿色手动安装MySQL数据库
  14. 自然语言处理-应用场景-文本分类:基于LSTM模型的情感分析【IMDB电影评论数据集】--(重点技术:自定义分词、文本序列化、输入数据批次化、词向量迁移使用)
  15. 用python画多啦爱梦图片_哆啦a梦画画步骤
  16. 51c语言字符,51单片机C语言教程(九) 语句应用
  17. 与Qt结合使用的3D引擎
  18. 使用springboot和freemarker导出word带图片
  19. ubuntu编译卡死解决
  20. python批量新建文件夹_Python3 批量创建文件夹

热门文章

  1. 大盘向好、交付企稳,金科股份中报里的关键信号
  2. CANoe自动化测试系统 简介
  3. 网吧无盘系统的安装与使用(转)
  4. 二维码及验证码的生成
  5. 【HTMLayout学习】学习缘由、什么是HTMLayout?
  6. 球差电镜测试常见的问题及解答(一)
  7. blos设置具体解释
  8. 一些kaldi常用的术语和命令(一)
  9. 求2021年某月某日为星期几
  10. c语言指针知识点总结