FE: 帧错误
如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为0,那么FE 置
位。这一位一直有效直到接收缓冲器(UDR) 被读取。当接收到的停止位为1 时, FE 标志为0。对UCSRA 进行写入时,这一位要写0。 DOR: 数据溢出
数据溢出时DOR 置位。当接收缓冲器满( 包含了两个数据),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这一位要写0。 PE: 奇偶校验错误
当奇偶校验使能(UPM1 = 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这一位要写0。 U2X: 倍速发送
这一位仅对异步操作有影响。使用同步操作时将此位清零。此位置1可将波特率分频因子从16降到8,从而有效的将异步通信模式的传输速率加倍。 MPCM: 多处理器通信模式
设置此位将启动多处理器通信模式。MPCM置位后,USART 接收器接收到的那些不包含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。
3. USART控制和状态寄存器B(UCSRB) bit7 bit6 bit5 bit4 RXCIE TXCIE UDRIE RXEN bit3 bit2 bit1 TXEN UCSZ2 RXB8 bit0 TXB8 RXCIE: 接收结束中断使能
置位后使能RXC中断。当RXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的RXC亦为1时可以产生USART接收结束中断。
TXCIE: 发送结束中断使能
置位后使能TXC中断。当TXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的TXC亦为1时可以产生USART发送结束中断。
UDRIE: USART 数据寄存器空中断使能
置位后使能UDRE中断。当UDRIE 为1,全局中断标志位SREG置位,UCSRA寄存器的UDRE 亦
为1时可以产生USART数据寄存器空中断。
RXEN: 接收使能
置位后将启动USART接收器。RxD 引脚的通用端口功能被USART功能所取代。禁止接收器将刷新接收缓冲器,并使 FE、DOR及PE标志无效。
TXEN: 发送使能
置位后将启动将启动USART发送器。TxD引脚的通用端口功能被USART功能所取代。TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传
送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。
UCSZ2: 字符长度
UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。
RXB8: 接收数据位8
对9位串行帧进行操作时,RXB8 是第9个数据位。读取UDR包含的低位数据之前首先要读取RXB8。
TXB8: 发送数据位8
对9位串行帧进行操作时,TXB8是第9个数据位。写UDR之前首先要对它进行写操作。
4. USART控制和状态寄存器C(UCSRC) bit7 bit6 bit5 bit4 URSEL UMSEL UPM1 UPM0 bit3 USBS bit2 bit1 bit0 UCSZ1 UCSZ0 UCPOL UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。
URSEL: 寄存器选择
通过该位选择访问UCSRC寄存器或UBRRH寄存器。当读UCSRC时,该位为1 ;当写UCSRC时,URSEL为1。
UMSEL: USART 模式选择
通过这一位来选择同步或异步工作模式。 UMSEL设置 UMSEL 0 1 模式 异步操作 同步操作 UPM1:0: 奇偶校验模式
这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中的PE 置位。
UPM 设置 UPM1 0 0 1 1 UPM0 0 1 0 1 奇偶模式 禁止 保留 偶校验 奇校验 USBS: 停止位选择
通过这一位可以设置停止位的位数。接收器忽略这一位的设置。 USBS 设置 USBS 0 1 停止位位数 1 2 UCSZ1:0: 字符长度
UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。 UCSZ 设置 UCSZ2 UCSZ1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 UCSZ0 0 1 0 1 0 1 0 1 字符长度 5 6 7 8 保留 保留 保留 9 UCPOL: 时钟极性
这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数
据采样,以及同步时钟XCK 之间的关系。
UCPOL 设置 UCPOL 0 1 发送数据的改变(TxD引脚的输出) XCK上升沿XCK XCK下降沿XCK 接收数据的采样(RxD 引脚的输入) 下降沿 上升沿
5. USART波特率寄存器(UBRRL和UBRRH)
bit15 URSEL bit14 – bit13 – bit12 – bit11 bit10 bit9 UBRR[11:8] bit8 UBRR[7:0] UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。
URSEL: 寄存器选择
通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH时,该位为0;当写UBRRH时, URSEL为0。
Bit 14:12 – 保留位
这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH时将这些位清零。
UBRR11:0: USART 波特率寄存器
这个12位的寄存器包含了USART的波特率信息。其中UBRRH包含了USART波特率高4 位,UBRRL包含了低8位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRL 将立即更新波特率分频器。
五、两线串行接口TWI
?
", 简单,但是强大而灵活的通讯接口,只需要两根线 ",. 支持主机和从机操作 ",. 器件可以工作于发送器模式或接收器模式 ",. 7位地址空间允许有128个从机 ",. 支持多主机仲裁 ",. 高达400kHz 的数据传输率 ",. 斜率受控的输出驱动器 ",. 可以抑制总线尖峰的噪声抑制器
",. 完全可编程的从机地址以及公共地址
",. 睡眠时地址匹配可以唤醒AVR 两线接口TWI很适合于典型的处理器应用。TWI协议允许系统设计者只用两根双向传输线就可以将128个不同的设备互连到一起。这两根线一是时钟SCL,一是数据SDA。外部硬件只需要两个上拉电阻,每根线上一个。所有连接到总线上的设备都有自己的地址。TWI协议解决了总线仲裁的问题。
1. TWI比特率寄存器TWBR
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 TWBR7 TWBR6 TWBR5 TWBR4 TWBR3 TWBR2 TWBR1 TWBR0 TWBR为比特率发生器分频因子。比特率发生器是一个分频器,在主机模式下产生SCL时钟频率。
2. TWI控制寄存器TWCR
bit7 TWINT bit6 TWEA bit5 bit4 bit3 bit2 TWEN bit1 – bit0 TWIE TWSTA TWSTO TWWC TWCR用来控制TWI操作。它用来使能TWI,通过施加START到总线上来启动主机访问,产生接收器应答,产生STOP状态,以及在写入数据到TWDR 寄存器时控制总线的暂停等。这个寄存器还可以给出在TWDR无法访问期间,试图将数据写入到TWDR而引起的写入冲突信息。 TWINT: TWI 中断标志
当TWI完成当前工作,希望应用程序介入时TWINT置位。若SREG的I标志以及TWCR寄存器的TWIE标志也置位,则MCU执行TWI中断例程。当TWINT置位时, SCL信号的低电平被延长。TWINT标志的清零必须通过软件写\来完成。执行中断时硬件不会自动将其改写为\。要注意的是,只要这一位被清零,TWI立即开始工作。因此,在清零TWINT之前一定要首先完成对地址寄存器TWAR,状态寄
存器TWSR,以及数据寄存器TWDR 的访问。
TWEA: 使能TWI 应答
TWEA标志控制应答脉冲的产生。若TWEA置位,出现如下条件时接口发出ACK脉冲:
",. 器件的从机地址与主机发出的地址相符合 ",. TWAR的TWGCE置位时接收到广播呼叫 ",. 在主机/从机接收模式下接收到一个字节的数据
将TWEA清零可以使器件暂时脱离总线。置位后器件重新恢复地址识别。
TWSTA: TWI START 状态标志
当CPU希望自己成为总线上的主机时需要置位TWSTA。TWI硬件检测总线是否可用。若总线空闲,接口就在总线上产生START状态。若总线忙,接口就一直等待,直到检测到一个STOP状态 ,然后产生
START以声明自己希望成为主机。发送START之后软件必须清零TWSTA。
TWSTO: TWI STOP 状态标志
在主机模式下,如果置位TWSTO,TWI 接口将在总线上产生STOP状态,然后TWSTO自动清零。在从机模式下,置位TWSTO可以使接口从错误状态恢复到未被寻址的状态。此时总线上不会有STOP状态
产生,但TWI返回一个定义好的未被寻址的从机模式且释放SCL与SDA为高阻态.
TWWC: TWI 写碰撞标志
当TWINT为低时写数据寄存器TWDR将置位TWWC。当TWINT为高时,每一次对TWDR的写访问都将更新此标志。 TWEN: TWI使能
TWEN位用于使能TWI操作与激活TWI接口。当TWEN位被写为\时,TWI引脚将I/O引脚切换到SCL与SDA引脚,使能波形斜率限制器与尖峰滤波器。如果该位清零, TWI接口模块将被关闭,所有TWI传输将被终止。 Res: 保留
保留,读返回值为‖0‖。
TWIE: 使能TWI中断
当SREG的I以及TWIE置位时,只要TWINT 为\, TWI中断就激活。
3. TWI状态寄存器TWSR
bit7 TWS7 bit6 TWS6 bit5 TWS5 bit4 TWS4 bit3 TWS3 bit2 – bit1 bit0 TWPS1 TWPS0 这5位用来反映TWI逻辑和总线的状态。不同的状态代码将会在后面的部分描述。注意从TWSR读出的值包括5位状态值与2位预分频值。检测状态位时设计者应屏蔽预分频位为\。这使状态检测独立于预分频器设置。在无特殊声明的情况下,在手册中使用该方法。 Res: 保留
保留,读返回值为\。
TWPS: TWI预分频位
这两位可读/写,用于控制比特率预分频因子。 TWI 比特率预分频器 TWPS1 TWPS0 0 0 1 1 bit7 TWD7 bit6 TWD6 bit5 TWD5 bit4 TWD4 0 1 0 1 bit3 TWD3 bit2 TWD2 预分频器值 1 4 16 64 bit1 TWD1 bit0 TWD0 4. TWI 数据寄存器TWDR 在发送模式, TWDR包含了要发送的字节;在接收模式, TWDR包含了接收到的数据。当TWI 接口没有进行移位工作(TWINT 置位) 时这个寄存器是可写的。 在第一次中断发生之前用户不能够初始化数据寄存器。只
要TWINT置位,TWDR的数据就是稳定的。在数据移出时,总线上的数据同时移入寄存器。TWDR总是包含了总线上出现的最后一个字节,除非MCU是从掉电或省电模式被TWI中断唤醒。此时TWDR的内容没有定义。总线仲裁失败时,主机将切换为从机,但总线上出现的数据不会丢失。ACK的处理由TWI逻辑自动管理, CPU不能直接访问ACK。
TWD: TWI 数据寄存器
根据状态的不同,其内容为要发送的下一个字节,或是接收到的数据。