打印

avr串口接收缓冲器问题

[复制链接]
4123|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
472666GAQ|  楼主 | 2011-1-3 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
增加了一个缓冲器。两个缓冲器的操作好象是一个循环的FIFO。因此对于每个接收
到的数据只能读一次!更重要的是错误标志FE 和DOR,以及第9 个数据位RXB8
与数据一起存放于接收缓冲器。因此必须在读取UDR 寄存器之前访问状态标志位。
否则将丢失错误状态。
现在接收移位寄存器可以作为第三级缓冲了。其意义是在两个缓冲器都没有空的时
候,将数据保存于串行移位寄存器之中( 参见Figure 79),直到检测到新的起始位。
从而增强了USART 抵抗数据过速(DOR) 的能力




不没明白的是
(2)两个缓冲器的操作好象是一个循环的FIFO。因此对于每个接收
到的数据只能读一次//没理解
(3)avr到底接收几个字节然后数据溢出出错DOR置位

相关帖子

沙发
ayb_ice| | 2011-1-3 13:19 | 只看该作者
还是先去看看FIFO原理吧

使用特权

评论回复
板凳
472666GAQ|  楼主 | 2011-1-3 13:25 | 只看该作者
fifo不就是一个先进先出的缓存么  循环的FIFO?是什么意思

使用特权

评论回复
地板
hycloudy| | 2011-1-3 14:33 | 只看该作者
2字节的FIFO,如果里面有2字节的数据没读,第3字节数据来时则溢出,第3字节丢失。
  每次读1个字节,同时原第2自己自动进入栈顶!
   每次读1个字节

使用特权

评论回复
5
ayb_ice| | 2011-1-3 15:14 | 只看该作者
堆栈其实是后进先出(LIFO)队列结构

使用特权

评论回复
6
472666GAQ|  楼主 | 2011-1-3 15:36 | 只看该作者
那这两个fifo都是存储串口接收回来的数据是一个接收数据 一个存储的是一些错误标志比如接收的第9位PE   fe等~~   还都是接收的数据呢

使用特权

评论回复
7
airwill| | 2011-1-4 10:49 | 只看该作者
(2)两个缓冲器的操作好象是一个循环的FIFO。因此对于每个接收
到的数据只能读一次//没理解

    请不要提循环的FIFO的概念. 这里只是说, 读过一次后, FIFO 下面的数据会自动升到顶上来. (所以, 如果你再读, 就是后面的数据了)

(3)avr到底接收几个字节然后数据溢出出错DOR置位
    接收到 1 个数据就会引发中断. avr 在设计时, 为了避免中断的延迟导致还没有读取接收的数据,后面的数据已经完成接收而覆盖先前的数据, 设计了 FIFO . 如果你的响应足够快, 可以不管 FIFO 的事情.

3. 必须在读取UDR 寄存器之前访问状态标志位。否则将丢失错误状态。
这是因为一个数据(8位数据和多位的状态位), 两个端口(UDR 寄存器和状态标志寄存器) 读取的问题导致的, 这说明 FIFO 的自动更新以读取 UDR 为条件, 而跟你有没有访问状态标志位无关. 因此, 你要关心状态标志位, 那就先读和保存状态标志, 再读 UDR; 如果不关心状态位, 那就读 UDR 好了, 不会影响 FIFO 系统.

使用特权

评论回复
8
472666GAQ|  楼主 | 2011-1-5 11:10 | 只看该作者
FIFO 下面的数据会自动升到顶上来(串口接收移位寄存器的数据)

谢谢啦

使用特权

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

本版积分规则

102

主题

285

帖子

2

粉丝