UART Receive FIFO and Receive Timeout

2024-03-01 14:32
文章标签 uart fifo timeout receive

本文主要是介绍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中断后,在UA

这篇关于UART Receive FIFO and Receive Timeout的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762778

相关文章

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

LabVIEW开发FPGA方法与FIFO数据丢失处理

开发基于NI 7975R FPGA的系统涉及一系列流程,包括驱动安装、LabVIEW项目设置、开发调试、编译和与Windows系统的通信。重点在于FIFO的正确配置,避免数据丢失是关键环节之一,尤其是在使用高速数据流传输时。以下将详细介绍这些过程,并重点讨论FIFO数据丢失的原因与解决方案。 FPGA开发流程 驱动安装与工具准备:开发FPGA需要安装LabVIEW FPGA模块以及N

笔记 14 : 彭老师课本第 8 章, UART : 寄存器介绍 ,

(99) 继续介绍 uart 的关于通道的 一整套 寄存器, UCON 等: ++ 接着介绍寄存器 UTRSTAT : ++ 接着介绍读写数据的寄存器: ++ 设置 uart 的波特率,有关的寄存器: ++ (100) (101) 谢谢

页面置换算 - FIFO、LFU、LRU

缓存算法(页面置换算法)-FIFO、LFU、LRU   在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO、LFU 1.FIFO算法   FIFO(First in First out),先进先出。其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会

UART串口通信——FPGA学习笔记9

一、数据通信基本概念 按数据通信方式分类: 串行通信、并行通信 按数据传输方向分类: 单工通信、半双工通信、全双工通信 按数据同步方式分类: 同步通信、异步通信 常见的串行通信接口: 二、串口通信:         UART 是一种采用异步串行通信方式的通用异步收发传输器(universal asynchronous receiver-transmitter)

新路程------imx6的uart小结(1)

imx6用的是RS485,今天看看这个接口是怎么初始化的。 首先在./arch/arm/mach-mx6/board-mx6q_sabresd.c里找uart的相关信息 在static void __init mx6_sabresd_board_init(void)肯定会有初始化的相关信息 gpio_request(SABRESD_EPDC_PWRSTAT, "uart

新路程------hi3516a的uart rts cts功能

有位前辈写了以gpio方式控制rts,在驱动内核中修改http://blog.csdn.net/edw200/article/details/52251385?locationNum=4   就是在发送前拉高,发送后拉低,但是这样要计算时间,比较麻烦,而且不同的波特率容易时间计算不准确,所以还是应该由上层把这个事做了,也就是用ioctl的形式来做,这样比较安全放心。        r

ERROR: epmd error for host YOUR_HOSTNAME: timeout (timed out)的解决方案

问题现象 Warning: PID file not written; -detached was passed.ERROR: epmd error for host prd-can3-0-mq01: timeout (timed out) 问题解决 经过一番检查,其实RabbitMQ报这个错的原因是无法在/etc/hosts中正确识别主机名,因此只需修改该文件即可 127.0.0.1

串行通信协议——UART

概述 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种广泛使用的串行通信协议,用于实现计算机与外设之间或两个计算机之间的数据传输。UART通信以异步方式进行,这意味着发送和接收设备不需要共享时钟信号。在嵌入式系统、工业控制、消费电子产品等领域,UART通信协议得到了广泛应用。 UART通信原理 UART通信基于RS-

电路笔记(通信):UART Universal Asynchronous Receiver/Transmitter+电缆信号完整性改善

UART协议概述 URAT(Universal Asynchronous Receiver/Transmitter)协议用于在两个设备之间进行数据传输。UART协议因其简单性和广泛应用而成为串行通信的一个基本选择,适合各种数据传输需求的应用。 异步传输 定义: UART是一种异步串行通信协议,这意味着数据在传输过程中不依赖于时钟信号,而是通过约定的波特率(baud rate)来同步数据传输。