Atmega90can32/64/128串口详解(一)

来源:互联网 发布:鬼才大小姐 知乎 编辑:程序博客网 时间:2024/06/06 01:11
Atmega90can系列有两个串口,USART0和USART1
下面以USART0为例:
先介绍一下与串口相关的寄存器:
***:USART I/O数据寄存器
Atmega90can32/64/128串口详解(一) - Hydeogen - Hydrogen的博客
很容易理解RXB0[7:0]即为串口读取缓冲区,TXB0为发送缓冲区
***:USART 控制和状态寄存器A-UCSR0A
Atmega90can32/64/128串口详解(一) - Hydeogen - Hydrogen的博客
 

Bit 7 – RXC0: USART 接收结束 

接收缓冲器中有未读出的数据时 RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷 

新,导致 RXC 清零。 RXC 标志可用来产生接收结束中断  

 Bit 6 – TXC0: USART 发送结束 

发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时 TXC 置位。执行发送结 

束中断时 TXC 标志自动清零,也可以通过写 进行清除操作。TXC 标志可用来产生发送 

结束中断  

Bit 5 – UDRE0: USART 数据寄存器空 

UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE1说明缓冲器为空,已 

准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断(见对 UDRIE位的描述)。 

复位后 UDRE 置位,表明发送器已经就绪。 

Bit 4 – FE0: 帧错误 

如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个 

停止位为 ,那么FE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。当接收到的 停止位为 时, FE 标志为 0。对 UCSRA 进行写入时,这一位要写 0。 

Bit 3 – DOR0: 数据溢出 

数据溢出时 DOR 置位。当接收缓冲器满 包含了两个数据 ),接收移位寄存器又有数据, 

若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器 

(UDR) 被读取。对 UCSRA 进行写入时,这一位要写 0。 

Bit 2 – PE0: 奇偶校验错误 

当奇偶校验使能  (UPM1 = 1) ,且接收缓冲器中所接收到的下一个字符有奇偶校验错误时 

UPE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。对 UCSRA 进行写入时,这一 位要写 0。 

Bit 1 – U2X0: 倍速发送 

这一位仅对异步操作有影响。使用同步操作时将此位清零。 

此位置 可将波特率分频因子从 16 降到 ,从而有效的将异步通信模式的传输速率加倍。 

Bit 0 – MPCM0: 多处理器通信模式 

设置此位将启动多处理器通信模式。 MPCM 置位后, USART 接收器接收到的那些不包 

含地址信息的输入帧都将被忽略。发送器不受 MPCM 设置的影响。

***:USART 控制和状态寄存器B-UCSR0B

Atmega90can32/64/128串口详解(一) - Hydeogen - Hydrogen的博客
 

Bit 7 – RXCIE0: 接收结束中断使能 

置位后使能 RXC 中断。当 RXCIE 为 ,全局中断标志位SREG 置位, UCSRA 寄存器 的 RXC 亦为 时可以产生 USART 接收结束中断。 

Bit 6 – TXCIE0: 发送结束中断使能 

置位后使能 TXC 中断。当 TXCIE 为 ,全局中断标志位SREG 置位,UCSRA 寄存器的 TXC 亦为 时可以产生 USART 发送结束中断。 

Bit 5 – UDRIE0: USART 数据寄存器空中断使能 

置位后使能 UDRE 中断。当 UDRIE 为 ,全局中断标志位SREG 置位,UCSRA 寄存器 的 UDRE 亦为 时可以产生 USART 数据寄存器空中断。 

Bit 4 – RXEN0: 接收使能 

置位后将启动 USART 接收器。 RxD 引脚的通用端口功能被 USART 功能所取代。禁止 

接收器将刷新接收缓冲器,并使 FE 、 DOR 及 PE 标志无效。 

Bit 3 – TXEN0: 发送使能 

置位后将启动将启动 USART 发送器。TxD 引脚的通用端口功能被 USART 功能所取代。 

TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存 

器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD 引脚恢复其通用I/O功能。 

Bit 2 – UCSZ02: 字符长度 

UCSZ2UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符 

长度 )。 

Bit 1 – RXB80: 接收数据位 8 

对 位串行帧进行操作时, RXB8 是第 个数据位。读取 UDR 包含的低位数据之前首先 要读取 RXB8。 

Bit 0 – TXB80: 发送数据位 

对 位串行帧进行操作时,TXB8 是第 个数据位。写 UDR 之前首先要对它进行写操作。 

***:USART 控制和状态寄存器C-UCSR0C

Atmega90can32/64/128串口详解(一) - Hydeogen - Hydrogen的博客
 

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。

Bit 6 – UMSEL0:  USART 模式选择 

通过这一位来选择同步或异步工作模式。

0    :异步

1    :同步

Bit 5:4  奇偶校验模式

00:禁止

01:保留

10:偶检验

11:奇校验


Bit 3  停止位选择

0 :一位停止位

1:两位停止位


Bit 2:1   字符长度

UCSZ01和UCSZ00是与UCSR0B的UCSZ02一起使用用的,用来设置数据帧包含的数据位数

当UCSZ02为0时,00表示5位,01表示6位,10表示7位,11表示8位.当UCSZ02为1时,11表示9位.

详情参见文档


Bit 0   UCPOL0   时钟极性

Atmega90can32/64/128串口详解(一) - Hydeogen - Hydrogen的博客
****:波特率寄存器 UBRRL与 UBRRH
Atmega90can32/64/128串口详解(一) - Hydeogen - Hydrogen的博客
 这个 12 位的寄存器包含了 USART 的波特率信息。其中 UBRRH 包含了 USART 波特率高 4 位, UBRRL 包含了低 8 位。波特率的改变将造成正在进行的数据传输受到破坏。写 UBRRL 将立即更新波特率分频器。
UBRR的设置和这些参数有关:U2X0,CPU频率,波特率
当U2X0为0时,即异步正常模式下,UBRR的计算公式:
1、U2X0=0时的公式计算
UBRR0L= (F_CPU/BAUDRATE/16-1)%256;
UBRR0H= (F_CPU/BAUDRATE/16-1)/256;

2、U2X0=1时的公式计算
UBRR0L= (F_CPU/BAUDRATE/8-1)%256;
UBRR0H= (F_CPU/BAUDRATE/8-1)/256;
0 0
原创粉丝点击