我正在阅读Atmel ATmega16微控制器的数据表,我在 USART 部分中找到了这句话:
两个缓冲寄存器作为循环运行 FIFO缓冲区。因此,每个输入数据只能读取一次UDR!更多 重要的是错误标志(FE和DOR)和第9个数据位(RXB8) 缓冲接收缓冲区中的数据。因此,必须始终读取状态位 在读取UDR寄存器之前。否则,自缓冲区状态以来错误状态将丢失 失去了。
我不知道缓冲错误标志和RXB8意味着什么。任何帮助将不胜感激。
答案 0 :(得分:4)
这里的主要警告是每个传入的字节只能读取一次UDR,并且在读取它时,所提到的错误标记将被清除。因此,如果一个人对错误标志或第9位"感兴趣在RXB8中,必须先读 才能读取UDR。
然而,在十年的AVR和串行通信设计中,我从未使用过RXB8。为什么?只有当您使用 9个数据位进行通信时才需要它。有关C和汇编程序中的示例,请参见数据表的第155页。大多数数据通信使用7或(更常见)8位,因此大多数时候不需要这个额外的位。如果您需要它,只需按照p上的示例操作即可。 155.
答案 1 :(得分:2)
更重要的是,错误标志(FE和DOR)和第9个数据位(RXB8)使用接收缓冲区中的数据进行缓冲。因此,在读取UDR寄存器之前必须始终读取状态位。否则,由于缓冲区状态丢失,错误状态将会丢失。
这只是指出,错误标志和第9个数据位(显然)与UDR FIFO中的数据耦合,并在读取UDR后立即丢失。
例:
如果使用9个数据位,则必须在读取UDR之前读取该第9位。否则,FIFO中的下一个字节(包括其状态位)将覆盖属于前一个字节的第9位的信息。这同样适用于错误位。