UART FIFO:让通信效率翻倍的黑科技

目录

FIFO定义     

FIFO基础配置

FIFO数据流

FIFO优势


FIFO定义

        UART通信的过程中,数据的传输速度是非常的关键。在实际的应用中,我们需要使用一些技巧来提高UART的传输效率,FIFO(First-In-First-Out)技术就是其中之一。

        FIFO(First-In First-Out)是一种先进先出的数据缓冲区,用于在UART通信中缓存收发数据。其核心目标是减少CPU中断频率,提升通信效率。

FIFO基础配置

FIFO功能使能 

FCR_ENABLE_FIFO: 激活UART的FIFO缓冲功能,提升数据传输效率。

// 典型应用:高速通信场景(如115200bps及以上波特率)
trigger = FCR_ENABLE_FIFO;

总线位宽配置

FCR_BUS_8BIT: 设置数据帧为8N1格式(8数据位、无校验、1停止位),需注意此处并非总线物理宽度,而是UART数据帧格式定义

// 数据格式示例:ASCII字符传输通常使用8N1
trigger |= FCR_BUS_8BIT; 

FIFO中断使能

FCR_TRAIL_INT: 在FIFO数据接收完成后触发中断,适合批量数据处理场景。

// 应用场景:接收完整数据包后通知CPU处理
trigger |= FCR_TRAIL_INT;

FIFO空中断

FCR_TX_ZERO_INT:实现零延迟发送中断响应,确保发送完成后立即释放总线

// 配置示例(假设FCR_TX_ZERO_INT对应bit3)
UART->FCR |= FCR_TX_ZERO_INT;  // 启用空中断

 FIFO超时中断

FCR_TX_ZERO_INT:实现零延迟发送中断响应,确保发送完成后立即释放总线

// 使能超时中断
UART->IER |= IER_TIME_OUT;

FIFO trigger level中断

触发级别宏定义典型应用场景
1字节触发 (L1)FCR_INT_TRIGGER_L0实时性要求极高的控制指令
8字节触发 (L8)FCR_INT_TRIGGER_L8中等速率数据传输
16字节触发 (L16)FCR_INT_TRIGGER_L16文件传输或日志记录
32字节触发 (L32)FCR_INT_TRIGGER_L32大数据块传输
switch(config->triggerLevel )
{
	case UART_INT_TRIGGER_L1:
		trigger |= FCR_INT_TRIGGER_L0;
		break;

	case UART_INT_TRIGGER_L8:
		trigger |= FCR_INT_TRIGGER_L8;
		break;

	case UART_INT_TRIGGER_L16:
		trigger |= FCR_INT_TRIGGER_L16;
		break;

	case UART_INT_TRIGGER_L32:
		trigger |= FCR_INT_TRIGGER_L32;
		break;
}

FIFO数据流

        UART一般有两个FIFO,TX_FIFO和RX_FIFO,和上位机交互如下所示:

  • 发送流程:CPU将数据批量写入TX_FIFO,UART自动按顺序将数据从缓冲区转移到发送移位器,逐位发送到物理线路上。
  • 接收流程:接收移位器逐位捕获数据,缓存到RX_FIFO中,达到预设触发条件(如数据量阈值或超时)后通知CPU读取。

FIFO优势

        降低中断频率:不使用FIFO,每收发1字节就会触发一次中断,频繁占用CPU资源。使用FIFO模式,仅当FIFO数据量达到预设阈值或超时才会触发中断,大幅减少中断次数。CPU 利用更多的时 间处理关键的实时任务而不是专职服务UART。

        防止数据丢失:不使用FIFO,大数据高速通信场景,CPU来不及处理数据会丢数据,使用FIFO模式,缓存多个字节,当达到预设阈值或超时中断CPU会主动读取数据,避免新数据覆盖旧数据。

        曾子:人非人不济,马非马不走,土非土不高,水非水不流。(一个人没有别人的帮助,就不可能成功;一匹马没有别的马竞争,就不会快跑;一个土台,没有别的土在下堆起,便高不起来;一泓池水,没有别的水相激荡,便流动不起来。)                        ——曾子《大戴礼记》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值