串口的RX FIFO为何总是无法被清空呢?

paopao1874 2011-07-24 02:20:02
按照常理来讲 只要读取完毕又无数据进来了,rx fifo应该就空了,但是今天遇到很郁闷的事,最后一个字符总是无限重复。
于是写串口的寄存器来reset rx fifo,结果发现,reset之后,依然会有数据,一直读fifo 就一直会有某个单一的字符,这是个啥情况呢?
...全文
819 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
paopao1874 2011-07-24
  • 打赏
  • 举报
回复
这个ready位 是自动被清空的,前提是FIFO为空就会被自动清零
所以我在查咋判断fifo是否为空
paopao1874 2011-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bjtea 的回复:]

什么芯片? 清空后(不等于没有内容了),依然可以读到最后一个字符属于正常。 问题在于RI标志应该不再出现,不少芯片都是RI与TI合用一个中断,所以你要分清,是否是TI标志引起的中断。
[/Quote]

这个sc16c550 的receive data ready 和 发送的 thr empty 是分开的,现在的问题是,只要我收到数据,LSR的receive data ready 位就一直变成1,搞得我不知道是不是真的又收到新的数据
bjtea 2011-07-24
  • 打赏
  • 举报
回复
没用过该芯片。你读完之后,需要人工清ready标志吗? 再就是,线路受到信号干扰了吗?
paopao1874 2011-07-24
  • 打赏
  • 举报
回复
使用的串口IC是 sc16c550
paopao1874 2011-07-24
  • 打赏
  • 举报
回复
我做测试,只发送一个字符给串口,串口收到后在中断中根据 LSR的receive data ready位来读取 fifo中的数据,发现第一个字符的确是我发送的,但是随后的就是某个字符一直重复,receive data ready位也是一直为1的,而示波器上看到,后面是没有数据发出去的。
bjtea 2011-07-24
  • 打赏
  • 举报
回复
什么芯片? 清空后(不等于没有内容了),依然可以读到最后一个字符属于正常。 问题在于RI标志应该不再出现,不少芯片都是RI与TI合用一个中断,所以你要分清,是否是TI标志引起的中断。
guetcw 2011-07-24
  • 打赏
  • 举报
回复
楼主你的是什么处理器,我遇到的更奇怪,reset TX的fifo后会有一定机率把RX fifo的数据顺序打乱,非常奇怪

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧