1

我正在阅读 Atmel ATmega16 微控制器的数据表,我在USART部分看到了这个短语:

两个缓冲寄存器作为循环 FIFO 缓冲器运行。因此,对于每个传入的数据,UDR 只能读取一次!更重要的是错误标志(FE 和 DOR)和第 9 个数据位(RXB8)与接收缓冲区中的数据一起缓冲。因此,必须始终在读取 UDR 寄存器之前读取状态位。否则,由于缓冲区状态丢失,错误状态将丢失。

我不知道缓冲错误标志和 RXB8 是什么意思。任何帮助将不胜感激。

4

2 回答 2

4

这里的主要警告是每个传入字节只能读取一次 UDR,并且在读取它时,提到的错误标志会被清除。因此,如果对错误标志或 RXB8 中的“第 9 位”感兴趣,则必须在读取 UDR之前读取它们。

然而,在十年的 AVR 和串行通信设计中,我从未不得不求助于使用 RXB8。为什么?仅当您使用9 个数据位进行通信时才需要它。有关 C 和汇编程序的示例,请参见数据表的第 155 页。大多数数据通信使用 7 位或(更常见的)8 位,因此大多数时候不需要这个额外的位。如果您需要它,只需按照第 4 页上的示例进行操作。155.

于 2017-06-22T17:59:47.173 回答
2

更重要的是错误标志(FE 和 DOR)和第 9 个数据位(RXB8)与接收缓冲区中的数据一起缓冲。因此,必须始终在读取 UDR 寄存器之前读取状态位。否则,由于缓冲区状态丢失,错误状态将丢失。

这只是指出,错误标志和第 9 个数据位(显然)与 UDR FIFO 中的数据耦合,并且在您读取 UDR 时立即丢失。

示例:
如果使用 9 个数据位,则必须在读取 UDR 之前读取第 9 位。否则,FIFO 中的下一个字节(包括其状态位)将覆盖属于前一个字节的第 9 位的信息。这同样适用于错误位。

于 2017-06-23T09:05:18.423 回答