[综合信息] Synwit SWM系列单片机的 UART FIFO

[复制链接]
 楼主| AdaMaYun 发表于 2023-4-25 16:55 | 显示全部楼层 |阅读模式
  • SWM芯片UART有独立的RX FIFO和TX FIFO,深度都是8
    ——RX FIFO 可以设定当 FIFO 中数据个数大于指定个数时产生中断,通知 APP 将接收到的数据读走。
    ——TX FIFO 可以设定当 FIFO 中数据个数小于指定个数时产生中断,通知 APP 将需要发送的数据写入 TX FIFO。

    通过使用 FIFO 和门限中断,可以大幅减少UART_Handler 中断函数执行的频率,提高芯片执行效率。





接收门限中断与接收超时中断
以如下配置为例:
  • RXThreshold = 3;
  • RXThresholdIEn = 1;
  • TimeoutTime = 10;
  • TimeoutIEn = 1;

SWM181、SWM260、SWM320
对方发送8个数据的情况

1.png
每接收到一个数据,RX FIFO中数据个数加一,当RX FIFO中数据个数大于RXThreshold时,触发接收中断。
对方发送9个数据的情况
2.png

只有当接收FIFO中有数据,且在指定时间内未接收到新的数据时,才会触发超时中断。

若应用中希望通过数据间时间间隔作为帧间隔依据,即不管对方发送过来多少个数据,最后都能产生超时中断,可以通过在接收ISR中从RX FIFO中读取数据时总是少读一个(即让一个数据留在RX FIFO中)来实现。
SWM190、SWM211、SWM341
UARTx->TOCR.MODE = 0
与SWM181、SWM260、SWM320情况完全相同
UARTx->TOCR.MODE = 1
不管对方发送几个数据,最后
不管对方发送几个数据,
最后都能触发超时中断
以如下配置为例:
  • TXThreshold = 4;
  • TXThresholdIEn = 1;

3.png

每发送出一个数据,TX FIFO中数据个数减一,当TX FIFO中数据个数小于等于TXThreshold时,触发发送中断。

初始化时不能开启发送中断,只能在发送FIFO填入数据后再开启发送中断;否则开启发送中断后会立即触发发送中断



plsbackup 发表于 2023-5-7 10:47 | 显示全部楼层
用UART通信,当FIFO接收缓冲区满了怎么办
deliahouse887 发表于 2023-5-7 16:18 | 显示全部楼层
使用UART FIFO的优点是可以降低CPU的负载,提高数据传输效率,缩短数据传输时间并减少数据丢失的可能性。
nomomy 发表于 2023-5-7 16:35 | 显示全部楼层
FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可节省CPU时间。
ingramward 发表于 2023-5-7 16:45 | 显示全部楼层
带FIFO模式的UART具有一个或多个可编程的FIFO缓冲区,用于存储发送或接收的数据。
houjiakai 发表于 2023-5-7 17:06 | 显示全部楼层
硬件FIFO是由串口芯片内部的缓冲区实现的,它可以存储多个字节的数据,并且可以自动地转移数据
51xlf 发表于 2023-5-7 17:51 | 显示全部楼层
UART FIFO还可以通过设置不同的阈值来控制缓存区的大小,以适应不同的应用场景和需求。
chenci2013 发表于 2023-5-7 18:29 | 显示全部楼层
不读取串口FIFO的数据 数据一直会保存在FIFO中吗?
wilhelmina2 发表于 2023-5-7 19:00 | 显示全部楼层
UART FIFO是UART串口通信中的一种缓存机制,它可以在发送和接收数据时暂存一定量的数据,从而提高串口通信的效率和稳定性。
youtome 发表于 2023-5-7 19:11 | 显示全部楼层
硬件FIFO的优点是速度快,效率高
beacherblack 发表于 2023-5-7 19:19 | 显示全部楼层
如何把fifo中的数据读出来               
juliestephen 发表于 2023-5-7 19:25 | 显示全部楼层
在使用UART FIFO时,需要根据实际情况进行合理的调节,以防止数据的溢出、丢失等问题。
i1mcu 发表于 2023-5-7 19:32 | 显示全部楼层
从FIFO读出数据用串口发送出去,怎么实现?
bestwell 发表于 2023-5-7 19:36 | 显示全部楼层
串口FIFO可以有效提高串口通信的效率和稳定性,减少数据的丢失和错误。
华芯微特FAE 发表于 2023-5-8 10:05 | 显示全部楼层
plsbackup 发表于 2023-5-7 10:47
用UART通信,当FIFO接收缓冲区满了怎么办

只有当 FIFO 不为满时才能继续往其中填入数据,例如:当 UART FIFO RX 接收满时,将无法继续接收新数据,并且 UARTx->CTRL[5 : RXOV] 接收端 FIFO 溢出标志位将会被硬件自动置 1 , 软件写 1 可清除该标志。
华芯微特FAE 发表于 2023-5-8 10:07 | 显示全部楼层
chenci2013 发表于 2023-5-7 18:29
不读取串口FIFO的数据 数据一直会保存在FIFO中吗?

未断电是会一直保存的。
华芯微特FAE 发表于 2023-5-8 10:09 | 显示全部楼层
beacherblack 发表于 2023-5-7 19:19
如何把fifo中的数据读出来

读 UART->DATA 寄存器,硬件会读取并返回 FIFO RX 缓存中的数据。
tpgf 发表于 2023-5-12 08:05 | 显示全部楼层
FIFO只是一个缓冲器而已,如果你的CPU没有什么别的工作或完全处理过来uart数据的话,可以用noFIFO模式,如果你的CPU有一些耗时工作要处理,可能uart数据来了很多才开始处理,这样就需要FIFO做缓冲区了
keaibukelian 发表于 2023-5-12 08:34 | 显示全部楼层
FIFO的设计时优秀而合理的,它已经帮你向导了收发过程中存在的任何问题,只要初始化配置UART后,就可以放心的收发了,FIFO和中断例程会自动搞定一切
paotangsan 发表于 2023-5-12 12:18 | 显示全部楼层
发送时,只要发送FIFO不满,数据只管往里连续放,放完后就直接退出发送子程序,随后,FIFO真正发送完成后会自动产生中断,通知主程序:我已经完成了真正的发送
您需要登录后才可以回帖 登录 | 注册

本版积分规则

299

主题

2492

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部