您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 4.1-4.3异步(UART)通信全解
第四章MSP430通信接口2Copyright2009TexasInstrumentsAllRightsReserved本章概述•MSP430系列微控制器中具有通信模块USCI(通用串行通信接口),可配置成以下三种通信接口:–它能够配置成UART(通用异步通信协议)(异步)–SPI(串行外设接口协议)(同步)–I2C(内部集成电路协议)模式(同步)•此外,一些MSP430系列还具有USB模块,它完全兼容USB2.0全速规范,扩展了MSP430的应用领域范围。3Copyright2009TexasInstrumentsAllRightsReserved本章结构•MSP430通信接口–4.1通信系统概述–4.2USCI模块概述–4.3通用异步通信协议UART模式–4.4串行外设接口协议SPI模式–4.5内部集成电路协议I2C模式–4.6通用串行总线协议USB模块4.1通信系统概述通信系统模型•所有数字通信系统都具有三种设备:–发送器:把信息处理成合适的格式,然后发送;–接收器:收集信息并抽取出原始数据;–通信介质:为信息流提供物理介质,通常为双绞线、光纤或射频网络。通信常用术语•并行:数据各位同时进行传送•串行:数据逐位顺序进行传送•全双工:(串行通信)收/发可同时进行•半双工:(串行通信)收/发不可同时进行•波特率(bps.):单位时间传送的位数并行通信•在并行通信系统中,要发送的数字值的每个位都具有独立的信号线。多条线上的逻辑电平共同形成了要发送的信息的值,下图为ASCII字符“W”并行传输。串口通信(1/2)串行通信的基本特征是数据逐位顺序进行传送串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平……等)不同,形成了多种串行通信的协议与接口标准。常见的有:•通用异步收发器(UART)•通用串行总线(USB)•I2C总线•CAN总线•SPI总线•RS-485,RS-232C,RS422A标准……串行通信(2/2)•在串行通信系统中,物理发送介质只需要一条信号线。发送器根据发送器和接收器之间指定的速率发送比特序列。要使通信双方同步,还需要一些额外的信息:–起始位:加到要发送的信息的开头,以识别一个新数据的开始;–停止位:加到要发送的信息的尾部,表示传输结束。图ASCII字符“W”串行传输同步、异步的概念异步通信:处理器之间不使用公共的参考时钟,通信双方分别有自己的时钟源,但必须使用相同的波特率。例如UART就是属于串行异步通信。同步通信:由主机提供时钟与数据,从机使用该时钟接收数据或发送数据,即通信双方公用时钟源。例如:SPI和I2C就属于串行同步通信。4.2USCI模块概述USCI模块特性•低功耗运行模式(自动启动)•两个独立模块:–USCI_A:–支持Lin/IrDA的UART;–SPI(主/从、3线和4线模式)。–USCI_B:–SPI(主/从、3线和4线模式);–I2C(主/从,高达400kHz)。•双缓冲TX/RX;•波特率/位时钟发生器:–自动波特率检测;–灵活的时钟源。•RX干扰抑制;•使能DMA;•错误检测。USCI_Ax模块框图——UART模式在异步模式下,USCI_Ax模块通过两个外部引脚UCAxRXD和UCAxTXD将芯片连接到外部系统。当UCSYNC=0时,选择UART模式。初始化USCI模块•使用USCI模块之前,要先对其进行初始化配置。建议采用以下步骤初始化或重配置USCI模块:–置位UCAxCTL1的UCSWRST;–初始化USCI寄存器;–配置相应引脚端口;–软件清零UCSWRST;–使能UCxRXIE和/或UCxTXIE中断。波特率生成•对于一个特定的时钟源的频率,分频值下列公式给出:•通常情况下,N不是一个整数,因此,需要使用调制器。低频波特率生成•当UCOS16=0时即选择为“低频波特率生成”模式。由于该模式使用低频时钟信号(32.768kHz晶振),故其非常适合低功耗应用。•波特率是由分频器和调制器中获得。•寄存器将通过下面公式得出的值来进行配置。超采样波特率生成•当UCOS16=1时即选择为“超采样波特率生成”模式。这个模式具有精确的位时序。它需要时钟源比所需的波特率高16倍。•通过以下两步可以产生波特率:•将时钟源16分频,结果存于BITCLK16,然后作为时钟源由分频器再次分频,然后供给第一个调制器。•BITCLK由BITCLK16定义,通过16分频及第二个调制器。•寄存器将通过下面公式得出的值来进行配置。4.3通用串行通信接口(USCI)—UART模式主要内容•UART总线协议–总线结构–工作模式–数据传输时序•MSP430UART模块–USCI概述–主从机模式–UART模块寄存器–应用示例全双工串行接口(UART)应用场合UART(UniversalAsynchronousReceiverandTransmitter,异步通信收发器),俗称“串口”。串口是嵌入式系统与外界联系的重要手段,主要用于以下两个方面:1、UART直接和其他的控制器进行数据交换2、UART和PC机通信:由于PC机串口是RS232电平,所以连接时需要使用RS232转换器片内UART模块其它通信设备片内UART模块PC机串口RS232电平转换TxDRxDTxDRxDTxDRxDTxDRxDUART特性UART是用硬件实现异步串行通信的通信接口电路。全双工异步模式可编程的7位、8位、9位数据独立的波特率发生器最大波特率是时钟频率的1/16两个缓冲器用于发送和接收CTS用于发送操作可编程的奇、偶和无校验检测帧错误和纠正错误支持发送和接收中断UART工作原理需选择一波特率作为发送(/接收)数据的时序,交互双方的波特率必须一致。UART的数据以帧为单位发送,一帧数据由以下几个部分顺序组成:开始位、数据位(可选位数7位或8位)、校验位(可选)、停止位(可选位数1位或2位)。通信双方的可选部分的设置必须完全一致。数据成功的发送和接收,都有专门的中断和状态位来指出,例如,接收到一帧数据,如果相应的中断开启,那么进入中断处理程序读出数据,如果未开启,则可以通过循环查看接收状态位来确定数否收到数据。UART帧结构图8位数据、无校验、一位停止位的工作示例图起始位1位数据区(由低到高)一般为7位或8位校验位1位停止位一般可选为1位或2位使用UART通信使用UART通信需要两个引脚:常用UART接口•RS232:是美国电子工业协会(EIA)制定的串行通讯标准,又称RS-232-C。RS232是一个全双工的通讯标准,它可以同时进行数据接收和发送的工作。•RS485:串行异步通信的波特率对于给定的BRCLK时钟源,所使用的波特率将决定分频因子N:N=INT(fBRCLK/Baud)式中,fBRCLK为实际进入波特率发生器的时钟频率Baud为实际所需要的波特率如果两者之比16,则令UCOS16=0··················································低频模式UCBR=INT(N)··············································取整UCBRS=round[(N-INT(N))×8]·····················四舍五入后取整如果两者之比≥16,则令UCOS16=1··················································低频模式UCBR=INT(N/16)··········································取整UCBRS=round{[(N/16)-INT(N/16)]×8}··········四舍五入后取整uart模式下可用的USCI寄存器名称描述访问复位值寄存器访问UCBxCTLW0USCI_Bx控制字0读/写0001h字UCBxBRWUSCI_Bx波特率控制字读/写0000h字UCBxMCTLUSCI_Bx调制器控制UCBxSTATUSCI_Bx状态寄存器读/写00h字节UCBxRXBUFUSCI_Bx接收缓存读/写00h字节UCBxTXBUFUSCI_Bx发送缓存读/写00h字节UCBxI2COAUSCI_BxI2C本机地址读/写0000h字UCBxI2CSAUSCI_BxI2C从机地址读/写0000h字UCBxICTLUSCI_Bx中断控制读/写0200h字UCBxIEUSCI_Bx中断使能读/写00h字节UCBxIFGUSCI_Bx中断标志读/写02h字节UCBxIVUSCI_Bx中断向量读0000h字USCI_Ax和USCI_Bx都有SPI模块,下面以USCI_Bx为例,介绍相关寄存器应用示例SPI主机与从机通过三线SPI接口通信,主机发送数据给从机,同时又接收从机发来的数据,发送数据从0x01开始递增,从机接收到数据,就立马发出,主机接到这个数据,进入中断如果发送和接收数据相同,则点亮LED灯,否则熄灭。程序流程图RXISR初始化SPI模块初始化发送数据MST_Data判断发送缓冲是否为空,若是,则发送第一个字符判断发送缓冲是否为空,为空说明上次发送完毕判断本次接收到的字符和上次发送是否相同,相同则亮灯发送数据自加1,并赋值给发送缓冲主机RXISR初始化SPI模块判断发送缓冲是否为空,为空说明上次发送完毕本次接收到的数据赋值给发送缓冲从机主机——端口初始化P8SEL|=BIT2+BIT3;P8DIR|=BIT2+BIT3;选择P8.2~P8.3为外设功能选择P8.2~P8.3端口方向为输出UCA1CTL1|=UCSWRST;UCA1CTL1|=UCSSEL_1;UCA1BR0=0x03;UCA1BR1=0;UCA1MCTL=UCBRS_3+UCBRF_0;UCA1CTL1&=~UCSWRSTUCA1IE|=UCRXIE;主机——UART模块初始化USCI_Bx模块逻辑复位CLK=ACLK配置波特率,32kHz/9600=3.41调制UCBRSx=3,UCBRFx=0USCI_Bx复位释放使能UART模块接收中断时钟配置while(BAKCTL&LOCKIO)BAKCTL&=~(LOCKIO);UCSCTL6&=~(XT1OFF);UCSCTL6|=XCAP_3;do{UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);SFRIFG1&=~OFIFG;}while(SFRIFG1&OFIFG);打开XT1解锁XT1引脚选择内接电容大小清除XT2,XT1,DCO错误标志清除晶振错误中断标志测试晶振错误标志主机——接收中断#pragmavector=USCI_B1_VECTOR__interruptvoidUSCI_B1_ISR(void){switch(__even_in_range(UCB1IV,4)){case0:break;case2:while(!(UCB1IFG&UCTXIFG));if(UCB1RXBUF==SLV_Data)P1OUT|=0x01;elseP1OUT&=~0x01;MST_Data++;SLV_Data++;UCB1TXBUF=MST_Data;__delay_cycles(500);break;case4:break;default:break;}}判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕如果接收与发送相同,点亮LED发送下一个字符从机——端口初始化P8SEL|=BIT4+BIT5+BIT6;P8DIR|=BIT4+BIT5+BIT6;P1REN|=BIT4;P1OUT|=BIT4;P1IES&=~BIT4;P1IFG&=~BIT4;P1IE|=BIT4;使能P1.4内部电阻P1.4输出为1选择P8.4~P8.6为外设功能选择P8.4~P8.6端口方向为输出P1.4上升沿捕获,进入中断P1.4IFG清零P1.4中断使能主机——SP
本文标题:4.1-4.3异步(UART)通信全解
链接地址:https://www.777doc.com/doc-6894464 .html