1、内容提要内容提要 本章介绍本章介绍ATmega单片机串行口的特点以单片机串行口的特点以及串行口的应用方法。描述串行数据通讯基及串行口的应用方法。描述串行数据通讯基础知识之后,首先介绍础知识之后,首先介绍ATmega单片机串行口单片机串行口的四种工作方式,控制寄存器和串行口的编的四种工作方式,控制寄存器和串行口的编程要点。然后,分别讲述串行口四种工作方程要点。然后,分别讲述串行口四种工作方式的应用方法和步骤。最后,还介绍几种式的应用方法和步骤。最后,还介绍几种PC机与多台机与多台ATmega单片机的近程通讯方法。单片机的近程通讯方法。5.1 串行外设接口串行外设接口SPI 串行外设接口串行外设接
2、口SPI(同步同步)允许允许ATmega16和外设和外设或其他或其他AVR器件进行高速的同步数据传输。器件进行高速的同步数据传输。5.1.1 ATmega16 SPI 的特点的特点1、全双工,、全双工,3线同步数据传输线同步数据传输2、主机或从机操作、主机或从机操作3、LSB 首先发送或首先发送或MSB 首先发送首先发送4、7 种可编程的比特率种可编程的比特率5、传输结束中断标志、传输结束中断标志6、写碰撞标志检测、写碰撞标志检测7、可以从闲置模式唤醒、可以从闲置模式唤醒8、作为主机时具有倍速模式、作为主机时具有倍速模式(CK/2)5.1.2 主机和从机之间的主机和从机之间的SPI 连接连接如
3、下图所示:图如下图所示:图5.1 SPI结构框图结构框图 主机和从机之间的主机和从机之间的SPI 连接如图连接如图5.1所示。所示。系统系统包括两个移位寄存器和一个主机时钟发生器。通过包括两个移位寄存器和一个主机时钟发生器。通过将需要的从机的将需要的从机的 SS 引脚拉低,主机启动一次通讯过引脚拉低,主机启动一次通讯过程。主机和从机将需要发送的数据放入相应的移位程。主机和从机将需要发送的数据放入相应的移位寄存器。主机在寄存器。主机在SCK 引脚上产生时钟脉冲以交换数引脚上产生时钟脉冲以交换数据。主机通过将从机的据。主机通过将从机的SS 拉高实现与从机的同步。拉高实现与从机的同步。配置为配置为S
4、PI 主机时,主机时,SPI 接口不自动控制接口不自动控制 SS 引引脚,必须由用户软件来处理。脚,必须由用户软件来处理。对对 SPI 数据寄存器数据寄存器写入数据即启动写入数据即启动SPI 时钟,将时钟,将8 比特的数据移入从比特的数据移入从机。传输结束后机。传输结束后SPI 时钟停止,传输结束标志时钟停止,传输结束标志SPIF 置位。如果此时置位。如果此时SPCR 寄存器的寄存器的SPI 中断使中断使能位能位SPIE 置位,中断就会发生。主机可以继续往置位,中断就会发生。主机可以继续往SPDR 写入数据以移位到从机中去,或者是将从写入数据以移位到从机中去,或者是将从机的机的SS 拉高以说明
5、数据包发送完成。最后进来的拉高以说明数据包发送完成。最后进来的数据将一直保存于缓冲寄存器里。数据将一直保存于缓冲寄存器里。配置为从机时,只要配置为从机时,只要SS 为高,为高,SPI 接口将一直接口将一直保持睡眠状态,并保持保持睡眠状态,并保持MISO 为三态。在这个状态为三态。在这个状态下,用软件可以更新下,用软件可以更新SPI 数据寄存器数据寄存器SPDR 的内容。的内容。即使此时即使此时SCK 引脚有输入时钟,引脚有输入时钟,SPDR 的数据也不的数据也不会移出,直至会移出,直至SS 被拉低。一个字节完全移出之后,被拉低。一个字节完全移出之后,传输结束标志传输结束标志SPIF置位。如果此
6、时置位。如果此时SPCR寄存器的寄存器的SPI中断使能位中断使能位SPIE置位,就会产生中断请求。在置位,就会产生中断请求。在读取移入的数据之前从机可以继续往读取移入的数据之前从机可以继续往SPDR 写入数写入数据,最后进来的数据将一直保存于缓冲寄存器里。据,最后进来的数据将一直保存于缓冲寄存器里。图图5.2 SPI主从主从CPU内部连接内部连接 SPI 系统的发送方向只有一个缓冲器,而在接收系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。在发送时一定要等到移位过程全方向有两个缓冲器。在发送时一定要等到移位过程全部结束后才能对部结束后才能对SPI 数据寄存器执行写操作。而在接数据寄存器
7、执行写操作。而在接收数据时,需要在下一个字符移位过程结束之前通过收数据时,需要在下一个字符移位过程结束之前通过访问访问SPI 数据寄存器读取当前接收到的字符。否则第数据寄存器读取当前接收到的字符。否则第一个字节将丢失。一个字节将丢失。工作于工作于SPI 从机模式时,控制逻辑对从机模式时,控制逻辑对SCK 引脚的引脚的输入信号进行采样。为了保证对时钟信号的正确采样,输入信号进行采样。为了保证对时钟信号的正确采样,SPI 时钟不能超过时钟不能超过fosc/4。SPI 使能后,使能后,MOSI、MISO、SCK 和和SS 引脚的引脚的数据方向将按照表数据方向将按照表5.1所示自动进行配置。所示自动进
8、行配置。表5.1 SPI引脚重载 例例5.1 将将SPI 初始化为主机,以及进行简单的数据发初始化为主机,以及进行简单的数据发送。其中送。其中DDR_SPI必须由实际的数据方向寄存器代替;必须由实际的数据方向寄存器代替;DD_MOSI、DD_MISO和和DD_SCK必须由实际的数据代替。必须由实际的数据代替。如如MOSI 为为PB5 引脚,则引脚,则DD_MOSI 要用要用DDB5 取代,取代,DDR_SPI 则用则用DDRB 取代。取代。void SPI_MasterInit(void)/*设置设置MOSI 和和SCK 为输出,其他为输入为输出,其他为输入*/DDR_SPI=(1DD_MOS
9、I)|(1DD_SCK);/*使能使能SPI 主机模式,设置时钟速率为主机模式,设置时钟速率为fck/16*/SPCR=(1SPE)|(1MSTR)|(1SPR0);void SPI_MasterTransmit(char cData)/*启动数据传输启动数据传输*/SPDR=cData;/*等待传输结束等待传输结束*/while(!(SPSR&(1SPIF);例例5.2 将将SPI 初始化为从机,以及进行简单的数据初始化为从机,以及进行简单的数据接收。接收。void spi_slaveinit(void)ddr_spi=(1DD_MISO);/设置设置MISO为输出,其他为输出,其他为输入为
10、输入SPCR=(1SPE);/使能使能SPIchar SPI_SLavereceive(void)While(!(SPSR&(1SPIF);/等待接收结束等待接收结束Return SPDR;5.2 全双工的串行设备接口全双工的串行设备接口SPI的功能及使用方法的功能及使用方法5.2.1 从机模式从机模式 当当SPI 配置为主机时,从机选择引脚配置为主机时,从机选择引脚SS 总是为输总是为输入。入。SS 为低将激活为低将激活SPI 接口,接口,MISO成为输出成为输出(用户用户必须进行相应的端口配置必须进行相应的端口配置)引脚,其他引脚成为输入引脚,其他引脚成为输入引脚。当引脚。当SS 为高时,
11、所有的引脚成为输入,为高时,所有的引脚成为输入,SPI 逻辑逻辑复位,不再接收数据。复位,不再接收数据。SS引脚对于数据包引脚对于数据包/字节的同步非常有用,可以字节的同步非常有用,可以使从机的位计数器与主机的时钟发生器同步。当使从机的位计数器与主机的时钟发生器同步。当SS 拉高时拉高时SPI从机立即复位接收和发送逻辑,并丢弃移从机立即复位接收和发送逻辑,并丢弃移位寄存器里不完整的数据。位寄存器里不完整的数据。5.2.2 主机模式主机模式 当当SPI 配置为主机时配置为主机时(MSTR 的的SPCR 置位置位),用户可以决定用户可以决定SS 引脚的方向。引脚的方向。若若SS 配置为输出,则此引
12、脚可以用作普通的配置为输出,则此引脚可以用作普通的I/O 口而不影响口而不影响SPI 系统。典型应用是用来驱动从系统。典型应用是用来驱动从机的机的SS 引脚。引脚。如果如果SS 配置为输入,必须保持为高电平,以保配置为输入,必须保持为高电平,以保证证SPI 的正常工作。若系统配置为主机,的正常工作。若系统配置为主机,SS 为输入为输入高电平;但被外设拉低,则高电平;但被外设拉低,则SPI 系统会将此低电平,系统会将此低电平,认为有一个外部主机将自己选择为从机。为了防止认为有一个外部主机将自己选择为从机。为了防止总线冲突,总线冲突,SPI 系统将实现如下动作:系统将实现如下动作:(1)清零)清零
13、SPCR 的的MSTR 位,使位,使SPI 成为从机,从成为从机,从而而MOSI 和和SCK 变为输入。变为输入。(2)SPSR 的的SPIF 置位。若置位。若SPI 中断和全局中断开中断和全局中断开放,则中断服务程序将得到执行。放,则中断服务程序将得到执行。因此,使用中断方式处理因此,使用中断方式处理SPI 主机的数据传输,主机的数据传输,并且存在并且存在SS 被拉低的可能性时,中断服务程序应该被拉低的可能性时,中断服务程序应该检查检查MSTR 是否为是否为“1”。若被清零,用户必须将其。若被清零,用户必须将其置位,以重新使能置位,以重新使能SPI 主机模式。主机模式。1、SPI寄存器描述寄
14、存器描述(1)SPI 控制寄存器控制寄存器 SPCRBit 7 SPIE:使能使能SPI 中断中断Bit 6 SPE:使能使能SPI Bit 5 DORD:数据次序数据次序Bit 4 MSTR:主主/从选择从选择Bit 3 CPOL:时钟极性时钟极性Bit 2 CPHA:时钟相位时钟相位Bits 1,0 SPR1,SPR0:SPI 时钟速率选择时钟速率选择1 与与0(2)SPI 状态寄存器状态寄存器 SPSRBit 7 SPIF:SPI 中断标志中断标志Bit 6 WCOL:写碰撞标志写碰撞标志Bit 5.1 Res:保留保留Bit 0 SPI2X:SPI 倍速倍速(3)SPI 数据寄存器数据
15、寄存器 SPDRSPI 数据寄存器为读数据寄存器为读/写寄存器,用来在寄存器文件写寄存器,用来在寄存器文件和和SPI移位寄存器之间传输数据。写寄存器将启动数移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。据传输,读寄存器将读取寄存器的接收缓冲器。5.2.3 数据模式数据模式 对于串行数据,对于串行数据,SCK 的相位和极性有的相位和极性有4 种组合。种组合。CPHA 和和CPOL 控制组合的方式见表控制组合的方式见表5.2。每一位数。每一位数据的移出和移入发生于据的移出和移入发生于SCK不同的信号跳变沿,以不同的信号跳变沿,以保证有足够的时间使数据稳定。保证有
16、足够的时间使数据稳定。表表5.2 SCK和振荡器频率的关系及和振荡器频率的关系及CPOL与与CPHA功能(功能(SPI寄存器描述)寄存器描述)图图5.3 当当CPHA=0时时SPI的传输格式的传输格式图图5.4 当当CPHA=1时时SPI的传送格式的传送格式例例5.3 SPI传送数据。因为传送数据。因为SPI可以看成是主从设备之可以看成是主从设备之间的一个间的一个16位的移位寄存器,主模式下发送一个字节位的移位寄存器,主模式下发送一个字节的程序如下:的程序如下:Viod f_SPIMasterTransmit(char cData)/*启动数据传输启动数据传输*/SPDR=cData;/*等待
17、传输结束等待传输结束*/while(!(SPSR&(1SPIF);例例5.4 从模式下接收一个字节。从模式下接收一个字节。Unsigned char f_SPISlaveReceive(void)/*等待接收结束等待接收结束*/while(!(SPSR&(18);UBRRL=(unsigned char)baud;/设置波特率设置波特率 UCSRB=(1RXEN)|(1TXEN);/接收器与发送器使能接收器与发送器使能 UCSRC(1URSEL)|(1USBS)|(3UCSZ0);5.3.6 数据发送数据发送 USART 发送器发送器 置位置位UCSRB 寄存器的发送允许位寄存器的发送允许位T
18、XEN 将使能将使能USART 的数据发送。使能后的数据发送。使能后TxD 引脚的通用引脚的通用I/O 功能即被功能即被USART 功能所取代,成为发送器的串功能所取代,成为发送器的串行输出引脚。发送数据之前要设置好波特率、工行输出引脚。发送数据之前要设置好波特率、工作模式与帧结构。如果使用同步发送模式,作模式与帧结构。如果使用同步发送模式,XCK 引脚上的时钟信号即为数据发送的时钟。引脚上的时钟信号即为数据发送的时钟。1、发送发送5 到到8 位数据位的帧位数据位的帧 将需要发送的数据加载到发送缓存器,加载过程将需要发送的数据加载到发送缓存器,加载过程为为CPU 对对UDR 寄存器的写操作。当
19、移位寄存器寄存器的写操作。当移位寄存器可以发送新一帧数据时,缓冲的数据将转移到移可以发送新一帧数据时,缓冲的数据将转移到移位寄存器。当移位寄存器处于空闲状态位寄存器。当移位寄存器处于空闲状态(没有正在没有正在进行的数据传输进行的数据传输),或前一帧数据的最后一个停止,或前一帧数据的最后一个停止位传送结束,它将加载新的数据。位传送结束,它将加载新的数据。2、发送、发送9 位数据位的帧位数据位的帧 如果发送如果发送9位数据的数据帧位数据的数据帧(UCSZ=7),应先将数,应先将数据的第据的第9 位写入寄存器位写入寄存器UCSRB 的的TXB8,然后再,然后再将低将低8位数据写入发送数据寄存器位数据
20、写入发送数据寄存器UDR。以下程。以下程序给出发送序给出发送9位数据的数据帧例子。位数据的数据帧例子。3、传送标志位与中断、传送标志位与中断 USART 发送器有两个标志位:发送器有两个标志位:USART 数据寄存数据寄存器空标志器空标志UDRE 及传输结束标志及传输结束标志TXC,两个标志位,两个标志位都可以产生中断。都可以产生中断。数据寄存器空数据寄存器空UDRE 标志位表示发送缓冲器是否可标志位表示发送缓冲器是否可以接受一个新的数据。该位在发送缓冲器空时被置以接受一个新的数据。该位在发送缓冲器空时被置“1”;当发送缓冲器包含需要发送的数据时清零。;当发送缓冲器包含需要发送的数据时清零。为
21、与将来的器件兼容,写为与将来的器件兼容,写UCSRA 寄存器时该位要寄存器时该位要写写“0”。当当UCSRB 寄存器中的数据寄存器空中断使能位寄存器中的数据寄存器空中断使能位UDRIE 为为“1”时,只要时,只要UDRE 被置位被置位(且全局中且全局中断使能断使能),就将产生,就将产生USART 数据寄存器空中断请数据寄存器空中断请求。对寄存器求。对寄存器UDR 执行写操作将清零执行写操作将清零UDRE。当。当采用中断方式的传输数据时,在数据寄存器空中采用中断方式的传输数据时,在数据寄存器空中断服务程序中必须写一个新的数据到断服务程序中必须写一个新的数据到UDR 以清零以清零UDRE;或者是禁
22、止数据寄存器空中断。否则一;或者是禁止数据寄存器空中断。否则一旦该中断程序结束,一个新的中断将再次产生。旦该中断程序结束,一个新的中断将再次产生。当整个数据帧移出发送移位寄存器,同时发送缓当整个数据帧移出发送移位寄存器,同时发送缓冲器中又没有新的数据时,发送结束标志冲器中又没有新的数据时,发送结束标志TXC 置置位。位。TXC 在传送结束中断执行时自动清零,也可在传送结束中断执行时自动清零,也可在该位写在该位写“1”来清零。来清零。TXC 标志位对于采用如标志位对于采用如RS-485 标准的半双工通信接口十分有用。在这些标准的半双工通信接口十分有用。在这些应用里,一旦传送完毕,应用程序必须释放
23、通信应用里,一旦传送完毕,应用程序必须释放通信总线并进入接收状态。总线并进入接收状态。4、奇偶校验产生电路、奇偶校验产生电路 奇偶校验产生电路为串行数据帧生成相应的校验奇偶校验产生电路为串行数据帧生成相应的校验位。校验位使能位。校验位使能(UPM1=1)时,发送控制逻辑电时,发送控制逻辑电路会在数据的最后一位与第一个停止位之间插入路会在数据的最后一位与第一个停止位之间插入奇偶校验位。奇偶校验位。5、禁止发送器、禁止发送器 TXEN 清零后,只有等到所有的数据发送完清零后,只有等到所有的数据发送完成,即发送移位寄存器与发送缓冲寄存器中没有成,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据后发
24、送器才被禁止。发送器禁止后,要传送的数据后发送器才被禁止。发送器禁止后,TxD引脚恢复其通用引脚恢复其通用I/O功能。功能。5.3.7 数据接收数据接收 USART 接收器接收器 置位置位UCSRB 寄存器的接收允许位寄存器的接收允许位(RXEN)即可启即可启动动USART 接收器。接收器使能后接收器。接收器使能后RxD的普通引脚的普通引脚功能被功能被USART 功能所取代,成为接收器的串行功能所取代,成为接收器的串行输入口。进行数据接收之前首先要设置好波特率、输入口。进行数据接收之前首先要设置好波特率、操作模式及帧格式。如果使用同步操作,操作模式及帧格式。如果使用同步操作,XCK 引脚上的时
25、钟被用为传输时钟。引脚上的时钟被用为传输时钟。以以5 到到8 个数据位的方式接收数据帧:个数据位的方式接收数据帧:1、接收结束标志及中断、接收结束标志及中断 USART 接收器有一个标志用来指明接收器的接收器有一个标志用来指明接收器的状态。状态。接收结束标志接收结束标志(RXC)用来说明接收缓冲器中是用来说明接收缓冲器中是否有未读出的数据。否有未读出的数据。当接收缓冲器中有未读出的当接收缓冲器中有未读出的数据时,此位为数据时,此位为1,当接收缓冲器空时为,当接收缓冲器空时为0。如果。如果接收器被禁止接收器被禁止(RXEN=0),接收缓冲器会被刷新,接收缓冲器会被刷新,从而使从而使RXC 清零。
26、清零。2、接收器错误标志、接收器错误标志 USART 接收器有三个错误标志:帧错误接收器有三个错误标志:帧错误(FE)、数、数据溢出据溢出(DOR)及奇偶校验错及奇偶校验错(UPE),都位于寄存,都位于寄存器器UCSRA。错误标志与数据帧一起保存在接收缓冲器中错误标志与数据帧一起保存在接收缓冲器中,读取读取UDR会改变缓冲器内容,会改变缓冲器内容,UCSRA 的内容必须在的内容必须在读接收缓冲器读接收缓冲器(UDR)之前读入。之前读入。错误标志的另一特点是它们都不能通过软件写操错误标志的另一特点是它们都不能通过软件写操作来修改,所有的错误标志都不能产生中断。作来修改,所有的错误标志都不能产生中
27、断。帧错误标志帧错误标志(FE)表明了存储在接收缓冲器中的下表明了存储在接收缓冲器中的下一个可读帧的第一个停止位的状态。停止位正确一个可读帧的第一个停止位的状态。停止位正确(为为1)则则FE 标志为标志为0,否则,否则FE 标志为标志为1。数据溢出标志数据溢出标志(DOR)表明由于接收缓冲器满造成表明由于接收缓冲器满造成了数据丢失。了数据丢失。奇偶校验错标志奇偶校验错标志(UPE)指出,接收缓冲器中的下指出,接收缓冲器中的下一帧数据在接收时有奇偶错误。一帧数据在接收时有奇偶错误。3、奇偶校验器、奇偶校验器 奇偶校验模式位奇偶校验模式位UPM1置位将启动奇偶校验器。置位将启动奇偶校验器。校验的模
28、式校验的模式(偶校验还是奇校验偶校验还是奇校验)由由UPM0确定。奇确定。奇偶校验使能后,校验器将计算输入数据的奇偶并偶校验使能后,校验器将计算输入数据的奇偶并把结果与数据帧的奇偶位进行比较。把结果与数据帧的奇偶位进行比较。校验结果将校验结果将与数据和停止位一起存储在接收缓冲器中。这样与数据和停止位一起存储在接收缓冲器中。这样就可以通过读取奇偶校验错误标志位就可以通过读取奇偶校验错误标志位(UPE)来检来检查接收的帧中是否有奇偶错误。查接收的帧中是否有奇偶错误。如果下一个从接收缓冲器中读出的数据有奇偶错如果下一个从接收缓冲器中读出的数据有奇偶错误,并且奇偶校验使能误,并且奇偶校验使能(UPM1
29、=1),则,则UPE置位。置位。直到接收缓冲器直到接收缓冲器(UDR)被读取,这一位一直有效。被读取,这一位一直有效。void USART_Flush(void)unsigned char dummy;while(UCSRA&(1RXC)dummy=UDR;4、异步数据接收、异步数据接收 USART 有一个时钟恢复单元和数据恢复单元用有一个时钟恢复单元和数据恢复单元用来处理异步数据接收。来处理异步数据接收。时钟恢复逻辑用于同步从时钟恢复逻辑用于同步从RxD 引脚输入的异步串行数据和内部的波特率时引脚输入的异步串行数据和内部的波特率时钟,数据恢复逻辑采集数据,并通过一低通滤波钟,数据恢复逻辑采集
30、数据,并通过一低通滤波器过滤所输入的每一位数据,从而提高接收器的器过滤所输入的每一位数据,从而提高接收器的抗干扰性能。抗干扰性能。5、恢复异步时钟、恢复异步时钟 时钟恢复逻辑将输入的串行数据帧与内部时钟同时钟恢复逻辑将输入的串行数据帧与内部时钟同步起来,普通工作模式下采样频率是波特率的步起来,普通工作模式下采样频率是波特率的16倍,倍速工作模式下则为波特率的倍,倍速工作模式下则为波特率的8倍。倍。6、恢复异步数据、恢复异步数据 接收时钟与起始位同步之后,数据恢复工作可开接收时钟与起始位同步之后,数据恢复工作可开始了。始了。数据恢复单元使用一个状态机来接收每一数据恢复单元使用一个状态机来接收每一
31、个数据位。这个状态机在普通模式下具有个数据位。这个状态机在普通模式下具有16个状个状态,在倍速模式下具有态,在倍速模式下具有8个状态。个状态。7、异步工作范围、异步工作范围 如果发送器比特率传输数据帧过快或过慢,或如果发送器比特率传输数据帧过快或过慢,或接收器内部产生的波特率没有相同的频率,那么接收器内部产生的波特率没有相同的频率,那么接收器就无法与起始位同步。接收器就无法与起始位同步。下面的公式可用来计算数据输入速率与内部接收器波下面的公式可用来计算数据输入速率与内部接收器波特率的比值。特率的比值。F(1)1S+S(2)(1)s lo wh ig hMDSRSDDSRDSSD 字符长度及奇偶
32、位长度的总和字符长度及奇偶位长度的总和(D=5 到到10 位位)S 每一位的采样数。普通模式下每一位的采样数。普通模式下 S=16,倍速模式下,倍速模式下S=8 SF 用于多数表决的第一个采样序号。用于多数表决的第一个采样序号。普通模式普通模式下下SF=8,倍速模式下,倍速模式下 SF=4 SM 用于多数表决的中间采样序号。用于多数表决的中间采样序号。普通模式下普通模式下SM=9,倍速模式下,倍速模式下SM=5 Rslow 是可接受的、最慢的数据输入速率与接收是可接受的、最慢的数据输入速率与接收器波特率的比值;器波特率的比值;Rfast 是可接受的、最快的数据是可接受的、最快的数据输入速率与接
33、收器波特率的比值。输入速率与接收器波特率的比值。5.3.8 多处理器通讯模式多处理器通讯模式 置位置位UCSRA 的多处理器通信模式位的多处理器通信模式位(MPCM)可以对可以对USART 接收器接收到的数据帧进行过滤。接收器接收到的数据帧进行过滤。那些没有那些没有地址信息的帧将被忽略,也不会存入接收缓冲器。地址信息的帧将被忽略,也不会存入接收缓冲器。在一个多处理器系统中,处理器通过同样的串行总在一个多处理器系统中,处理器通过同样的串行总线进行通信,这种过滤有效的减少了需要线进行通信,这种过滤有效的减少了需要 CPU 处理处理的数据帧的数量。的数据帧的数量。MPCM位的设置不影响发送器的工作,
34、但在使用多位的设置不影响发送器的工作,但在使用多处理器通信模式的系统中,它的使用方法会有所不处理器通信模式的系统中,它的使用方法会有所不同。同。如果接收器所接收的数据帧长度为如果接收器所接收的数据帧长度为5 到到8 位,那么位,那么第一个停止位表示这一帧包含的是数据还是地址第一个停止位表示这一帧包含的是数据还是地址信息。信息。如果接收器所接收的数据帧长度为如果接收器所接收的数据帧长度为9 位,那么由位,那么由第第9 位位(RXB8)来确定是数据还是地址信息。如果来确定是数据还是地址信息。如果确定帧类型的位确定帧类型的位(第一个停止位或第第一个停止位或第9 个数据位个数据位)为为1,那么这是地址
35、帧,否则为数据帧。,那么这是地址帧,否则为数据帧。在多处理器通信模式下,多个从处理器可以从一在多处理器通信模式下,多个从处理器可以从一个主处理器接收数据。首先要通过解码地址帧来个主处理器接收数据。首先要通过解码地址帧来确定所寻址的是哪一个处理器。如果寻址到某一确定所寻址的是哪一个处理器。如果寻址到某一个处理器,它将正常接收后续的数据,而其他的个处理器,它将正常接收后续的数据,而其他的从处理器会忽略这些帧直到接收到另一个地址帧。从处理器会忽略这些帧直到接收到另一个地址帧。使用使用MPCM:对于一个作为主机的处理器来说,它可以使用对于一个作为主机的处理器来说,它可以使用9 位数据帧格式位数据帧格式
36、(UCSZ=7)。如果传输的是一个地。如果传输的是一个地址帧址帧(TXB8=1)就将第就将第9 位位(TXB8)置置1,如果是,如果是一个数据帧一个数据帧(TXB=0)就将它清零。在这种帧格式就将它清零。在这种帧格式下,从处理器必须工作于下,从处理器必须工作于9 位数据帧格式。位数据帧格式。下面即为在多处理器通信模式下进行数据交换的步下面即为在多处理器通信模式下进行数据交换的步骤:骤:(1)所有从处理器都工作在多处理器通信模式)所有从处理器都工作在多处理器通信模式(UCSRA 寄存器的寄存器的MPCM 置位置位)。(2)主处理器发送地址帧后,所有从处理器都会)主处理器发送地址帧后,所有从处理器
37、都会接收并读取此帧。从处理器接收并读取此帧。从处理器UCSRA寄存器的寄存器的RXC 正常置位。正常置位。(3)每一个从处理器都会读取)每一个从处理器都会读取UDR 寄存器的内寄存器的内容已确定自己是否被选中。如果选中,就清零容已确定自己是否被选中。如果选中,就清零UCSRA 的的MPCM 位,否则它将等待下一个地址位,否则它将等待下一个地址字节的到来,并保持字节的到来,并保持MPCM 为为1。(4)被寻址的从处理器将接收所有的数据帧,直)被寻址的从处理器将接收所有的数据帧,直到收到一个新的地址帧。而那些保持到收到一个新的地址帧。而那些保持MPCM 位为位为1 的从处理器将忽略这些数据。的从处
38、理器将忽略这些数据。(5)被寻址的处理器接收到最后一个数据帧后,)被寻址的处理器接收到最后一个数据帧后,它将置位它将置位MPCM,并等待主处理器发送下一个地,并等待主处理器发送下一个地址帧。然后第址帧。然后第2 步之后的步骤重复进行。步之后的步骤重复进行。不要使用读不要使用读-修改修改-写指令写指令(SBI 和和CBI)来操作来操作MPCM 位。位。MPCM 和和TXC 标志使用相同的标志使用相同的 I/O 单元,使用单元,使用SBI 或或CBI 指令可能会不小心将它清指令可能会不小心将它清零。零。访问访问UBRRH/UCSRC 寄存器寄存器 UBRRH 与寄存器与寄存器UCSRC 共用共用I
39、/O 地址。因此访地址。因此访问该地址时需注意以下问题。问该地址时需注意以下问题。1、写访问写访问 当在该地址执行写访问时,当在该地址执行写访问时,USART 寄存器选择位寄存器选择位(URSEL)控制被写入的寄存器。若控制被写入的寄存器。若URSEL 为为0,对对UBRRH 值更新;值更新;若若 URSEL 为为1,对,对UCSRC 设设置更新。置更新。2、读访问读访问 读访问由时序控制。一旦返回读访问由时序控制。一旦返回UBRRH 寄存器内容寄存器内容则读则读I/O 地址。若寄存器地址在前一个系统时钟周地址。若寄存器地址在前一个系统时钟周期中读入,当前时钟下对寄存器的读入将返回期中读入,当
40、前时钟下对寄存器的读入将返回UCSRC 内容中。注意,读内容中。注意,读UCSRC 的时钟序列为的时钟序列为自动工作。在读操作中的中断自动工作。在读操作中的中断(例如禁止全局中断例如禁止全局中断)必须人为控制。必须人为控制。3、USART 寄存器描述寄存器描述(1)USART I/O 数据寄存器数据寄存器(UDR)USART 发送数据缓冲寄存器和发送数据缓冲寄存器和USART 接收数据接收数据缓冲寄存器共享相同的缓冲寄存器共享相同的I/O 地址,称为地址,称为USART 数数据寄存器或据寄存器或UDR。将数据写入。将数据写入UDR 时实际操作时实际操作的是发送数据缓冲寄存器的是发送数据缓冲寄存
41、器(TXB),读,读UDR 时实际时实际返回的是接收数据缓冲寄存器返回的是接收数据缓冲寄存器(RXB)的内容。的内容。(2)USART 控制和状态寄存器控制和状态寄存器A(UCSRA)Bit 7 RXC:USART 接收结束接收缓冲器中有未读接收结束接收缓冲器中有未读出的数据时出的数据时RXC 置位,否则清零。置位,否则清零。Bit 6 TXC:USART 发送结束发送结束Bit 5 UDRE:USART 数据寄存器空数据寄存器空Bit 4 FE:帧错误帧错误Bit 3 DOR:数据溢出数据溢出Bit 2 PE:奇偶校验错误奇偶校验错误Bit 1 U2X:倍速发送倍速发送Bit 0 MPCM:
42、多处理器通信模式多处理器通信模式(3)USART 控制和状态寄存器控制和状态寄存器B(UCSRB)Bit 7 RXCIE:接收结束中断使能接收结束中断使能Bit 6 TXCIE:发送结束中断使能发送结束中断使能Bit 5 UDRIE:USART 数据寄存器空中断使能数据寄存器空中断使能Bit 4 RXEN:接收使能接收使能Bit 3 TXEN:发送使能发送使能Bit 2 UCSZ2:字符长度字符长度Bit 1 RXB8:接收数据位接收数据位 8Bit 0 TXB8:发送数据位发送数据位8(4)USART 控制和状态寄存器控制和状态寄存器C(UCSRC)UCSRC寄存器与寄存器与UBRRH寄存器
43、共用相同的寄存器共用相同的I/O地址。地址。Bit 7 URSEL:寄存器选择寄存器选择Bit 6 UMSEL:USART 模式选择模式选择Bit 5:4 UPM1:0:奇偶校验模式奇偶校验模式Bit 3 USBS:停止位选择停止位选择Bit 2:1 UCSZ1:0:字符长度字符长度Bit 0 UCPOL:时钟极性时钟极性表表5.4 USART 控制和状态寄存器设置控制和状态寄存器设置(5)USART 波特率寄存器波特率寄存器(UBRRL和和UBRRH)UCSRC寄存器与寄存器与UBRRH寄存器共用相同的寄存器共用相同的I/O地址。地址。Bit 15 URSEL:寄存器选择寄存器选择Bit 1
44、4:12 保留位保留位Bit 11:0 UBRR11:0:USART 波特率寄存器波特率寄存器 下面给出一个初始化下面给出一个初始化USART的例子的例子 void uart_init(void)/波特率波特率:19200/数据位:数据位:8位位/方式方式:异步异步/奇偶校验奇偶校验:没有没有/停止位停止位:1位位UBRRL=0 x19;UBRRH=0 x00;UCSRA=0 x00;UCSRC=0 x86;UCSRB=0 xd8;5.4 两线串行接口两线串行接口TWI 5.4.1 TWI主要特点主要特点 简单,但是强大而灵活的通讯接口,只需要两根线简单,但是强大而灵活的通讯接口,只需要两根线
45、支持主机和从机操作支持主机和从机操作 器件可以工作于发送器模式或接收器模式器件可以工作于发送器模式或接收器模式 7 位地址空间允许有位地址空间允许有128 个从机个从机 支持多主机仲裁支持多主机仲裁 高达高达400 kHz 的数据传输率的数据传输率 斜率受控的输出驱动器斜率受控的输出驱动器 可以抑制总线尖峰的噪声抑制器可以抑制总线尖峰的噪声抑制器 完全可编程的从机地址以及公共地址完全可编程的从机地址以及公共地址 睡眠时地址匹配可以唤醒睡眠时地址匹配可以唤醒AVR 1、两线串行接口总线定义、两线串行接口总线定义 TWI 协议允许系统设计者只用两根双向传输线就协议允许系统设计者只用两根双向传输线就
46、可以将可以将128个不同的设备互连到一起。这两根线一个不同的设备互连到一起。这两根线一是时钟是时钟SCL,一是数据,一是数据SDA。外部硬件只需要两。外部硬件只需要两个上拉电阻,每根线上一个。所有连接到总线上个上拉电阻,每根线上一个。所有连接到总线上的设备都有自己的地址。的设备都有自己的地址。TWI 协议解决了总线仲协议解决了总线仲裁的问题。裁的问题。图图5.9 TWI 总线的连接总线的连接表表5.5 TWI 词汇词汇 2、TWI的电气连接的电气连接 从图从图5.9可以看出,两根线都通过上拉电阻与可以看出,两根线都通过上拉电阻与正电源连接,正电源连接,TWI 兼容的器件的总线驱动都是漏兼容的器
47、件的总线驱动都是漏极开路或集电极开路的,极开路或集电极开路的,TWI器件输出为器件输出为“0”时,时,TWI总线会产生低电平。当所有的总线会产生低电平。当所有的TWI器件输出器件输出为三态时,总线会输出高电平,允许上拉电阻将为三态时,总线会输出高电平,允许上拉电阻将电压拉高。注意,为保证所有的总线操作,凡是电压拉高。注意,为保证所有的总线操作,凡是与与TWI 总线连接的总线连接的AVR 器件必须上电。器件必须上电。3、TWI的传输数据的传输数据(位位)TWI总线上数据位的传送与时钟脉冲同步。时钟总线上数据位的传送与时钟脉冲同步。时钟线为高时,数据线电压必须保持稳定,除非在启线为高时,数据线电压
48、必须保持稳定,除非在启动与停止的状态下。动与停止的状态下。图图5.10 数据有效性数据有效性 4、START/STOP状态状态 主机启动与停止数据传输。主机在总线上发出主机启动与停止数据传输。主机在总线上发出START 信号启动数据传输,在总线上发出信号启动数据传输,在总线上发出STOP 信号停止数据传输。在信号停止数据传输。在START 与与STOP 状态之间,状态之间,需要假定总线忙,不允许其它主机控制总线,特例需要假定总线忙,不允许其它主机控制总线,特例是在是在START 与与STOP 状态之间发出一个新的状态之间发出一个新的START 状态。如下所示,状态。如下所示,START与与ST
49、OP状态是状态是在在SCL线为高时,通过改变线为高时,通过改变SDA 电平来实现的。电平来实现的。图图5.11 启动、停止和重启动状态启动、停止和重启动状态 5、地址数据包格式、地址数据包格式 在在TWI 总线上传送的地址包均为总线上传送的地址包均为9位,包括位,包括7位地位地址位、址位、1 位位READ/WRITE 控制位与控制位与1位应答位。位应答位。如果如果READ/WRITE 为为1,则执行读操作;否则执,则执行读操作;否则执行写操作。从机被寻址后,必须在第九个行写操作。从机被寻址后,必须在第九个SCL(ACK)周期通过拉低周期通过拉低SDA 作出应答。若该从机忙作出应答。若该从机忙或
50、有其它原因无法响应主机,则应该在或有其它原因无法响应主机,则应该在ACK 周期周期保持保持SDA 为高。然后主机可以发出为高。然后主机可以发出STOP 状态或状态或REPEATED START状态重新开始发送。地址包状态重新开始发送。地址包包括从机地址与分别称为包括从机地址与分别称为SLA+R 或或SLA+W 的的READ 或或WRITE 位。位。6、数据包格式、数据包格式 在在TWI 总线上传送的数据包为总线上传送的数据包为9位长,包括位长,包括8位数位数据位及据位及1 位应答位。在数据传送中,主机产生时位应答位。在数据传送中,主机产生时钟及钟及START 与与STOP状态,而接收器响应接收