嵌入式学习小组
直播中

张鹏

7年用户 1163经验值
私信 关注

关于Nano130 UART的RX-FIFO问题求解

手册上是说当RX-FIFO中的一个字节被CPU读出,RX_POINTER_F才会减一。我直接跑官方的UART_TxRx_Function例程,串口输入8个以上的字节是正常回显的。但是如果在接收中断里打一个断点单步调试,发现停在断电位置的时候RX_POINTER_F就已经少了2个字节了,而且每走一步RX_POINTER_F都会减2,这就导致之后去循环读取RBR的时候得到的数据不全。请问有人遇到过这个问题吗,是不是我什么地方没有配置好?
另外,我发现每走一步RX_POINTER_F减2的时候RBR和THR寄存器里的值刚好是被读出的两个字节,为什么会这样?而且我看手册里RBR和THR指向的是同一个地址,为什么会是两个不同的值?

回帖(1)

cherr番茄

2023-10-21 16:06:15
根据您的描述,可能是您在接收中断中未正确处理RX_FIFO中的数据导致的问题。当接收中断触发时,应该从RX_FIFO中读取所有的数据,并将RX_POINTER_F更新为RX_FIFO中新的数据起始位置。否则,RX_POINTER_F将会指向上一次读取的位置,导致访问RX_FIFO时读取到的是旧的数据,而不是新的数据。

另外,关于RBR和THR指向同一地址的问题,这是因为UART的数据收发是通过RBR和THR寄存器进行的。当收到一个字节时,UART会将其存储在FIFO中,并将其写入RBR寄存器。当要发送一个字节时,将要发送的数据写入THR寄存器,UART将从THR寄存器中读取数据并发送到外部设备。因此,RBR和THR指向的是同一FIFO地址,但在不同的时刻起到不同的作用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分