打印
[综合信息]

Synwit SWM系列单片机的 UART FIFO

[复制链接]
1124|47
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  • 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个数据的情况


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


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

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



每发送出一个数据,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时间。

使用特权

评论回复
5
ingramward| | 2023-5-7 16:45 | 只看该作者
带FIFO模式的UART具有一个或多个可编程的FIFO缓冲区,用于存储发送或接收的数据。

使用特权

评论回复
6
houjiakai| | 2023-5-7 17:06 | 只看该作者
硬件FIFO是由串口芯片内部的缓冲区实现的,它可以存储多个字节的数据,并且可以自动地转移数据

使用特权

评论回复
7
51xlf| | 2023-5-7 17:51 | 只看该作者
UART FIFO还可以通过设置不同的阈值来控制缓存区的大小,以适应不同的应用场景和需求。

使用特权

评论回复
8
chenci2013| | 2023-5-7 18:29 | 只看该作者
不读取串口FIFO的数据 数据一直会保存在FIFO中吗?

使用特权

评论回复
9
wilhelmina2| | 2023-5-7 19:00 | 只看该作者
UART FIFO是UART串口通信中的一种缓存机制,它可以在发送和接收数据时暂存一定量的数据,从而提高串口通信的效率和稳定性。

使用特权

评论回复
10
youtome| | 2023-5-7 19:11 | 只看该作者
硬件FIFO的优点是速度快,效率高

使用特权

评论回复
11
beacherblack| | 2023-5-7 19:19 | 只看该作者
如何把fifo中的数据读出来               

使用特权

评论回复
12
juliestephen| | 2023-5-7 19:25 | 只看该作者
在使用UART FIFO时,需要根据实际情况进行合理的调节,以防止数据的溢出、丢失等问题。

使用特权

评论回复
13
i1mcu| | 2023-5-7 19:32 | 只看该作者
从FIFO读出数据用串口发送出去,怎么实现?

使用特权

评论回复
14
bestwell| | 2023-5-7 19:36 | 只看该作者
串口FIFO可以有效提高串口通信的效率和稳定性,减少数据的丢失和错误。

使用特权

评论回复
15
华芯微特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 可清除该标志。

使用特权

评论回复
16
华芯微特FAE| | 2023-5-8 10:07 | 只看该作者
chenci2013 发表于 2023-5-7 18:29
不读取串口FIFO的数据 数据一直会保存在FIFO中吗?

未断电是会一直保存的。

使用特权

评论回复
17
华芯微特FAE| | 2023-5-8 10:09 | 只看该作者
beacherblack 发表于 2023-5-7 19:19
如何把fifo中的数据读出来

读 UART->DATA 寄存器,硬件会读取并返回 FIFO RX 缓存中的数据。

使用特权

评论回复
18
tpgf| | 2023-5-12 08:05 | 只看该作者
FIFO只是一个缓冲器而已,如果你的CPU没有什么别的工作或完全处理过来uart数据的话,可以用noFIFO模式,如果你的CPU有一些耗时工作要处理,可能uart数据来了很多才开始处理,这样就需要FIFO做缓冲区了

使用特权

评论回复
19
keaibukelian| | 2023-5-12 08:34 | 只看该作者
FIFO的设计时优秀而合理的,它已经帮你向导了收发过程中存在的任何问题,只要初始化配置UART后,就可以放心的收发了,FIFO和中断例程会自动搞定一切

使用特权

评论回复
20
paotangsan| | 2023-5-12 12:18 | 只看该作者
发送时,只要发送FIFO不满,数据只管往里连续放,放完后就直接退出发送子程序,随后,FIFO真正发送完成后会自动产生中断,通知主程序:我已经完成了真正的发送

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

240

主题

1800

帖子

3

粉丝