第13章 异步通信与USART接口基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24
对寄存器UBRRB/UBRRC的操作
UBRRB/UBRRC占用相同的地址空间,故 使用过程中注意对最高位URSEL的设置
写操作: URSEL=0,数据写入UBRRB,
URSEL=1,数据写入UBRRC
读操作:第1次读UBRRB的数据,第2次读UBRRC
的数据
25
最常用的配置百度文库式
UCSRB=0x00; UCSRA=0x00; //控制寄存器清零 UCSRC=(1<<URSEL)|(0<< UCSZ1)|(3<<UCSZ0); //选择UCSRC,异步模式,禁止 校验,1位停止位,8位数据位 baud=MCLK/16/baud-1 // UBRRL=baud; UBRRH=baud>>8; //设置波特率 UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); //接收、发送使能,接收中断使能 SREG=BIT(7); //全局中断开放 DDRD|=0X02; //配置TX为输出(很重要)
21
USART控制和状态寄存器C
• Bit 7 – URSEL: 寄存器选择 • Bit 6 – UMSEL: USART 模式选择
• Bit 5:4 – UPM1:0: 奇偶校验模式 • Bit 3 – USBS: 停止位选择
22
• Bit 2:1 – UCSZ1:0: 字符长度 UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据 位数(字符长度)。
13
波特率(位/秒) 计算公式
BAUD为通信速率(b/s); fosc为系统时钟频率; UBRR为波特率寄存器UBRRH、UBRRL中的值 (0~4095) 14
双倍速工作模式
通过设定UCSRA 寄存器的U2X 可以使传输速 率加倍。该位只对异步工作模式有效。工作 在同步模式时,设置该位为"0”
15
外部时钟
同步从机操作模式由外部时钟驱动,如Figure 70 所 示。 输入到XCK 引脚的外部时钟由同步寄存器进行采样, 用以提高稳定性。同步寄存器的输出通过一个边沿检 测器,然后应用于发送器与接收器。这一过程引入了 两个CPU 时钟周期的延时,因此外部XCK 的最大时钟 频率由以下公式限制: fsck<fosc/4要注意fosc 由系统时钟的稳定性决定,为 了防止因频率漂移而丢失数据,建议保留足够的裕量。
26
13.2.5 串行通信波特率的设置与偏差
自学(了解)
27
13.3 USART的基本操作
13.3.1 USART的初始化 void USART_Init( unsigned int baud ) {
/*设置波特率*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /*使能接收器和发送器*、 UCSRB = (1<<RXEN)|(1<<TXEN); /*设置帧格式:8位数据位,两位停止位*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); }
3
IDLE-线路空闲,线路空闲时,线路保持逻辑1 St-起始位,逻辑0 [n]-数据位(0~8),最少5位,最多9位,低位 在前 [P] —校验位 Spn—停止位,逻辑“1”
4
13.1.1 异步通信
异步通信就是采用异步传输方式实现数据交 换的一种通信方式 主要特点: 发端和收端时钟信号彼此独立,互不同步 发送数据时,严格按照格式发送,接收时亦 按格式接收
37
3)接收完成标志和中断
USART 接收器有一个标志用来指明接收器的状态。 接收结束标志(RXC) 用来说明接收缓冲器中是否有 未读出的数据。 当接收缓冲器中有未读出的数据时 ,此位为1,当接收缓冲器空时为0( 即不包含未读出 的数据)。如果接收器被禁止(RXEN = 0),接收缓冲 器会被刷新,从而使RXC 清零。置位UCSRB 的接收 结束中断使能位(RXCIE) 后,只要RXC 标志置位( 且 全局中断只能) 就会产生USART 接收结束中断。使 用中断方式进行数据接收时,数据接收结束中断服 务程序程序必须从UDR 读取数据以清RXC 标志,否 则只要中断处理程序
36
unsigned int USART_Receive( void ) { unsigned char status, resh, resl; while ( !(UCSRA & (1<<RXC)) ) ; status = UCSRA; resh = UCSRB; resl = UDR; if ( status & (1<<FE)|(1<<DOR)|(1<<PE) ) return -1; resh = (resh >> 1) & 0x01; return ((resh << 8) | resl); }
20
USART控制和状态寄存器B
• Bit 7 – RXCIE: 接收结束中断使能 • Bit 6 – TXCIE: 发送结束中断使能 • Bit 5 – UDRIE: USART 数据寄存器空中断使能 • Bit 4 – RXEN: 接收使能 • Bit 3 – TXEN: 发送使能 • Bit 2 – UCSZ2: 字符长度 • Bit 1 – RXB8: 接收数据位 8 • Bit 0 – TXB8: 发送数据位8
28
13.3.2
数据发送
1)发送5 到8 位数据位的帧 void USART_Transmit( unsigned char data ) { /*等待发送缓冲器空*/ while ( !( UCSRA & (1<<UDRE)) ); /*将数据放入缓冲器,发送数据*/ UDR = data; }
5
注意
异步通信中,收发双方必须有相同的约定--相同的传输波特率和相同格式的数据帧 波特率就是规定数据帧中一个位的宽度
6
波特率
每秒钟传送二进制数码的位数(也叫比特率), 单位:b/s 异步通信的波特率一般都是1200的整数倍
7
13.2 AVR的异步传输接口USART
•全双工操作( 独立的串行接收和发送寄存器) • 异步或同步操作 • 主机或从机提供时钟的同步操作 • 高精度的波特率发生器 • 支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 • 硬件支持的奇偶校验操作 • 数据过速检测 • 帧错误检测 • 噪声滤波,包括错误的起始位检测,以及数字低通 滤波器 • 三个独立的中断:发送结束中断, 发送数据寄存器 空中断,以及接收结束中断 • 多处理器通讯模式 • 倍速异步通讯模式 8
13.2.1 概述
9
组成
三大部分构成:时钟发生器,数据发送器和 接收器
控制寄存器位所有模块共享
10
13.2.2 串行时钟发生器
11
USART支持4种模式的时钟
普通异步模式 双倍速的异步模式 主机同步模式 从机同步模式
12
波特率发生器
USART 的波特率寄存器UBRR 和降序计数器相 连接,一起构成可编程的预分频器或波特率发 生器。降序计数器对系统时钟计数,当其计数 到零或UBRRL 寄存器被写时,会自动装入 UBRR 寄存器的值。
29
2)发送9位数据的帧
void USART_Transmit( unsigned int data ) { /*等待发送缓冲器空*/ while ( !( UCSRA & (1<<UDRE))) ); /*复制第9位至TXB8*/ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) UCSRB |= (1<<TXB8); /*将数据放入缓冲器,发送数据*/ UDR = data; }
30
3.传送标志位与中断
USART 发送器有两个标志位:USART 数据寄存器空标 志UDRE 及传输结束标志TXC,两个标志位都可以产生 中断。
31
4.校验位
奇偶校验产生电路为串行数据帧生成相 应的校验位。校验位使能(UPM1 = 1) 时 ,发送控制逻辑电路会在数据的最后一 位与第一个停止位之间插入奇偶校验位 。
第13章 异步通信与USART接 口基础
liudongz2003@163.com 刘东卓
1
基本概念
通用异步串行接收/发送接口—UART
AVR中,增强型串行接口简称USART
2
13.1 异步传输的基本概念
13.1.1 异步传输的字符数据帧格式
异步传输的一个字符帧的组成方式称为该字符发的 数据帧格式。基本的字符数据帧是由7~13位组成 的
16
同步时钟操作
使用同步模式时(UMSEL = 1)XCK 引脚被用于 时钟输入( 从机模式) 或时钟输出( 主机模式)。 时钟的边沿、数据的采样与数据的变化之间的 关系的基本规律是:在改变数据输出端TXD 的XCK 时钟的相反边沿对数据输入端RXD 进 行采样。
17
13.2.3 数据帧格式
• 1 个起始位 • 5、 6、 7、 8 或9 个数据位 • 无校验位、奇校验或偶校验位 • 1或2 个停止位
32
5.禁止发送
TXEN 清零后,只有等到所有的数据发送 完成后发送器才能够真正禁止,即发送 移位寄存器与发送缓冲寄存器中没有要 传送的数据。发送器禁止后,TXD引脚 恢复其通用I/O功能。
33
13.3.3数据接收—USART接收器
1)以5 到8 个数据位的方式接收数据帧 一旦接收器检测到一个有效的起始位,便开始接收数据。起始位 后的每一位数据都将以所设定的波特率或XCK 时钟进行接收 ,直到收到一帧数据的第一个停止位。接收到的数据 被送入接收移位寄存器。第二个停止位会被接收器忽略。 接 收到第一个停止位后,接收移位寄存器就包含了一个完整的 数据帧。这时移位寄存器中的内容将被转移到接收缓冲器中 。通过读取UDR 就可以获得接收缓冲器的内容的。 以下程序给出一个对RXC 标志采用轮询方式接收数据的例子 。当数据帧少于8 位时,从UDR 读取的相应的高几位为0。 当然,执行本段代码之前首先要初始化USART。
34
unsigned char USART_Receive( void ) { /*等待接收数据标志位置位*/ while ( !(UCSRA & (1<<RXC)) ) ; /*读出UDR中的数据*/ return UDR; }
35
2)接收9 个数据位的帧
如果设定了9 位数据的数据帧(UCSZ=7),在从UDR 读取低8 位之前必须首先读取寄存器UCSRB 的RXB8 以获得第9 位数据。这个规则同样适用于状态标志 位FE、DOR 及UPE。状态通过读取UCSRA获得,数 据通过UDR获得。读取UDR存储单元会改变接收缓 冲器FIFO 的状态,进而改变同样存储在FIFO 中的 TXB8、 FE、DOR 及UPE 位。 接下来的代码示例展示了一个简单的USART接收函 数,说明如何处理9位数据及状态位。
18
13.2.4 USART寄存器
USART 数据寄存器 --UDR
19
USART控制和状态寄存器A
• Bit 7 – RXC: USART 接收结束 • Bit 6 – TXC: USART 发送结束 • Bit 5 – UDRE: USART 数据寄存器空 • Bit 4 – FE: 帧错误 • Bit 3 – DOR: 数据溢出 • Bit 2 – PE: 奇偶校验错误 • Bit 1 – U2X: 倍速发送 • Bit 0 – MPCM: 多处理器通信模式
• Bit 0 – UCPOL: 时钟极性
23
USART波特率寄存器
• Bit 15 – URSEL: 寄存器选择 通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH 时,该位为0 ;当 写UBRRH 时, URSEL 为0。 • Bit 14:12 – 保留位 这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH 时将这些位清零。 • Bit 11:0 – UBRR11:0: USART 波特率寄存器 12 位的寄存器包含了USART 的波特率信息。其中UBRRH 包含了USART 波特率 高4 位,UBRRL 包含了低8 位。波特率的改变将造成正在进行的数据传输受到破坏。写 UBRRL 将立即更新波特率分频器。
对寄存器UBRRB/UBRRC的操作
UBRRB/UBRRC占用相同的地址空间,故 使用过程中注意对最高位URSEL的设置
写操作: URSEL=0,数据写入UBRRB,
URSEL=1,数据写入UBRRC
读操作:第1次读UBRRB的数据,第2次读UBRRC
的数据
25
最常用的配置百度文库式
UCSRB=0x00; UCSRA=0x00; //控制寄存器清零 UCSRC=(1<<URSEL)|(0<< UCSZ1)|(3<<UCSZ0); //选择UCSRC,异步模式,禁止 校验,1位停止位,8位数据位 baud=MCLK/16/baud-1 // UBRRL=baud; UBRRH=baud>>8; //设置波特率 UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); //接收、发送使能,接收中断使能 SREG=BIT(7); //全局中断开放 DDRD|=0X02; //配置TX为输出(很重要)
21
USART控制和状态寄存器C
• Bit 7 – URSEL: 寄存器选择 • Bit 6 – UMSEL: USART 模式选择
• Bit 5:4 – UPM1:0: 奇偶校验模式 • Bit 3 – USBS: 停止位选择
22
• Bit 2:1 – UCSZ1:0: 字符长度 UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据 位数(字符长度)。
13
波特率(位/秒) 计算公式
BAUD为通信速率(b/s); fosc为系统时钟频率; UBRR为波特率寄存器UBRRH、UBRRL中的值 (0~4095) 14
双倍速工作模式
通过设定UCSRA 寄存器的U2X 可以使传输速 率加倍。该位只对异步工作模式有效。工作 在同步模式时,设置该位为"0”
15
外部时钟
同步从机操作模式由外部时钟驱动,如Figure 70 所 示。 输入到XCK 引脚的外部时钟由同步寄存器进行采样, 用以提高稳定性。同步寄存器的输出通过一个边沿检 测器,然后应用于发送器与接收器。这一过程引入了 两个CPU 时钟周期的延时,因此外部XCK 的最大时钟 频率由以下公式限制: fsck<fosc/4要注意fosc 由系统时钟的稳定性决定,为 了防止因频率漂移而丢失数据,建议保留足够的裕量。
26
13.2.5 串行通信波特率的设置与偏差
自学(了解)
27
13.3 USART的基本操作
13.3.1 USART的初始化 void USART_Init( unsigned int baud ) {
/*设置波特率*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /*使能接收器和发送器*、 UCSRB = (1<<RXEN)|(1<<TXEN); /*设置帧格式:8位数据位,两位停止位*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); }
3
IDLE-线路空闲,线路空闲时,线路保持逻辑1 St-起始位,逻辑0 [n]-数据位(0~8),最少5位,最多9位,低位 在前 [P] —校验位 Spn—停止位,逻辑“1”
4
13.1.1 异步通信
异步通信就是采用异步传输方式实现数据交 换的一种通信方式 主要特点: 发端和收端时钟信号彼此独立,互不同步 发送数据时,严格按照格式发送,接收时亦 按格式接收
37
3)接收完成标志和中断
USART 接收器有一个标志用来指明接收器的状态。 接收结束标志(RXC) 用来说明接收缓冲器中是否有 未读出的数据。 当接收缓冲器中有未读出的数据时 ,此位为1,当接收缓冲器空时为0( 即不包含未读出 的数据)。如果接收器被禁止(RXEN = 0),接收缓冲 器会被刷新,从而使RXC 清零。置位UCSRB 的接收 结束中断使能位(RXCIE) 后,只要RXC 标志置位( 且 全局中断只能) 就会产生USART 接收结束中断。使 用中断方式进行数据接收时,数据接收结束中断服 务程序程序必须从UDR 读取数据以清RXC 标志,否 则只要中断处理程序
36
unsigned int USART_Receive( void ) { unsigned char status, resh, resl; while ( !(UCSRA & (1<<RXC)) ) ; status = UCSRA; resh = UCSRB; resl = UDR; if ( status & (1<<FE)|(1<<DOR)|(1<<PE) ) return -1; resh = (resh >> 1) & 0x01; return ((resh << 8) | resl); }
20
USART控制和状态寄存器B
• Bit 7 – RXCIE: 接收结束中断使能 • Bit 6 – TXCIE: 发送结束中断使能 • Bit 5 – UDRIE: USART 数据寄存器空中断使能 • Bit 4 – RXEN: 接收使能 • Bit 3 – TXEN: 发送使能 • Bit 2 – UCSZ2: 字符长度 • Bit 1 – RXB8: 接收数据位 8 • Bit 0 – TXB8: 发送数据位8
28
13.3.2
数据发送
1)发送5 到8 位数据位的帧 void USART_Transmit( unsigned char data ) { /*等待发送缓冲器空*/ while ( !( UCSRA & (1<<UDRE)) ); /*将数据放入缓冲器,发送数据*/ UDR = data; }
5
注意
异步通信中,收发双方必须有相同的约定--相同的传输波特率和相同格式的数据帧 波特率就是规定数据帧中一个位的宽度
6
波特率
每秒钟传送二进制数码的位数(也叫比特率), 单位:b/s 异步通信的波特率一般都是1200的整数倍
7
13.2 AVR的异步传输接口USART
•全双工操作( 独立的串行接收和发送寄存器) • 异步或同步操作 • 主机或从机提供时钟的同步操作 • 高精度的波特率发生器 • 支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 • 硬件支持的奇偶校验操作 • 数据过速检测 • 帧错误检测 • 噪声滤波,包括错误的起始位检测,以及数字低通 滤波器 • 三个独立的中断:发送结束中断, 发送数据寄存器 空中断,以及接收结束中断 • 多处理器通讯模式 • 倍速异步通讯模式 8
13.2.1 概述
9
组成
三大部分构成:时钟发生器,数据发送器和 接收器
控制寄存器位所有模块共享
10
13.2.2 串行时钟发生器
11
USART支持4种模式的时钟
普通异步模式 双倍速的异步模式 主机同步模式 从机同步模式
12
波特率发生器
USART 的波特率寄存器UBRR 和降序计数器相 连接,一起构成可编程的预分频器或波特率发 生器。降序计数器对系统时钟计数,当其计数 到零或UBRRL 寄存器被写时,会自动装入 UBRR 寄存器的值。
29
2)发送9位数据的帧
void USART_Transmit( unsigned int data ) { /*等待发送缓冲器空*/ while ( !( UCSRA & (1<<UDRE))) ); /*复制第9位至TXB8*/ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) UCSRB |= (1<<TXB8); /*将数据放入缓冲器,发送数据*/ UDR = data; }
30
3.传送标志位与中断
USART 发送器有两个标志位:USART 数据寄存器空标 志UDRE 及传输结束标志TXC,两个标志位都可以产生 中断。
31
4.校验位
奇偶校验产生电路为串行数据帧生成相 应的校验位。校验位使能(UPM1 = 1) 时 ,发送控制逻辑电路会在数据的最后一 位与第一个停止位之间插入奇偶校验位 。
第13章 异步通信与USART接 口基础
liudongz2003@163.com 刘东卓
1
基本概念
通用异步串行接收/发送接口—UART
AVR中,增强型串行接口简称USART
2
13.1 异步传输的基本概念
13.1.1 异步传输的字符数据帧格式
异步传输的一个字符帧的组成方式称为该字符发的 数据帧格式。基本的字符数据帧是由7~13位组成 的
16
同步时钟操作
使用同步模式时(UMSEL = 1)XCK 引脚被用于 时钟输入( 从机模式) 或时钟输出( 主机模式)。 时钟的边沿、数据的采样与数据的变化之间的 关系的基本规律是:在改变数据输出端TXD 的XCK 时钟的相反边沿对数据输入端RXD 进 行采样。
17
13.2.3 数据帧格式
• 1 个起始位 • 5、 6、 7、 8 或9 个数据位 • 无校验位、奇校验或偶校验位 • 1或2 个停止位
32
5.禁止发送
TXEN 清零后,只有等到所有的数据发送 完成后发送器才能够真正禁止,即发送 移位寄存器与发送缓冲寄存器中没有要 传送的数据。发送器禁止后,TXD引脚 恢复其通用I/O功能。
33
13.3.3数据接收—USART接收器
1)以5 到8 个数据位的方式接收数据帧 一旦接收器检测到一个有效的起始位,便开始接收数据。起始位 后的每一位数据都将以所设定的波特率或XCK 时钟进行接收 ,直到收到一帧数据的第一个停止位。接收到的数据 被送入接收移位寄存器。第二个停止位会被接收器忽略。 接 收到第一个停止位后,接收移位寄存器就包含了一个完整的 数据帧。这时移位寄存器中的内容将被转移到接收缓冲器中 。通过读取UDR 就可以获得接收缓冲器的内容的。 以下程序给出一个对RXC 标志采用轮询方式接收数据的例子 。当数据帧少于8 位时,从UDR 读取的相应的高几位为0。 当然,执行本段代码之前首先要初始化USART。
34
unsigned char USART_Receive( void ) { /*等待接收数据标志位置位*/ while ( !(UCSRA & (1<<RXC)) ) ; /*读出UDR中的数据*/ return UDR; }
35
2)接收9 个数据位的帧
如果设定了9 位数据的数据帧(UCSZ=7),在从UDR 读取低8 位之前必须首先读取寄存器UCSRB 的RXB8 以获得第9 位数据。这个规则同样适用于状态标志 位FE、DOR 及UPE。状态通过读取UCSRA获得,数 据通过UDR获得。读取UDR存储单元会改变接收缓 冲器FIFO 的状态,进而改变同样存储在FIFO 中的 TXB8、 FE、DOR 及UPE 位。 接下来的代码示例展示了一个简单的USART接收函 数,说明如何处理9位数据及状态位。
18
13.2.4 USART寄存器
USART 数据寄存器 --UDR
19
USART控制和状态寄存器A
• Bit 7 – RXC: USART 接收结束 • Bit 6 – TXC: USART 发送结束 • Bit 5 – UDRE: USART 数据寄存器空 • Bit 4 – FE: 帧错误 • Bit 3 – DOR: 数据溢出 • Bit 2 – PE: 奇偶校验错误 • Bit 1 – U2X: 倍速发送 • Bit 0 – MPCM: 多处理器通信模式
• Bit 0 – UCPOL: 时钟极性
23
USART波特率寄存器
• Bit 15 – URSEL: 寄存器选择 通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH 时,该位为0 ;当 写UBRRH 时, URSEL 为0。 • Bit 14:12 – 保留位 这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH 时将这些位清零。 • Bit 11:0 – UBRR11:0: USART 波特率寄存器 12 位的寄存器包含了USART 的波特率信息。其中UBRRH 包含了USART 波特率 高4 位,UBRRL 包含了低8 位。波特率的改变将造成正在进行的数据传输受到破坏。写 UBRRL 将立即更新波特率分频器。