您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MSP430同步串行通信SPI
同步串行通信SPI内容提要SPI总线协议MSP430SPI模块SPI应用SPI总线介绍SPI接口是Motorola首先提出的全双工三/四线同步串行外围接口,采用主从模式架构,支持多从设备应用,一般只支持单主设备。利用3~4条线完成两个芯片之间的双工高速通信。两条数据线用于收发数据,一条时钟线用于同步,一条作为从机选择。时钟由主设备控制,当主机发送一字节数据(通过主出从入MOSI引脚)的同时,从机返回一字节数据(通过主入从出MISO引脚)。总线上允许连接多个设备,在同一时刻只允许一个主机操作总线,并且同时只能与一个从机通信。主机控制数据的传输过程。目前应用中的数据速率可达Mbps级。一、SPI总线协议SPI总线可在软件的控制下构成各种简单的或复杂的系统:•1个主MCU和几个从MCU•几个从MCU相互连接构成多主机系统(分布式系统)•1个主MCU和1个或几个从I/O设备常用SPI总线结构主控器MCU被控器1被控器2被控器N.../SS1/SS2/SSNSCKMOSIMISOSPI典型结构如下:SPI工作模式主机模式:当器件作为主机时,使用一个IO引脚拉低相应从机的选择引脚(STE),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生。通过MOSI发送数据,同时通过MISO引脚接收从机发出的数据。从机模式:当器件作为从机时,传输在从机选择引脚(STE)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。SPI电气连接以4线SPI为例,其通信时需要的4个引脚分别为:引脚名称类型描述SCK输入/输出串行时钟,用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机驱动,并且从机接收STE输入从机选择,SPI从机选择信号是一个低有效信号,用于指示被选择参与数据传输的从机。每个从机都有各自特定的从机选择输入信号。MISO输入/输出主入从出,MISO信号是一个单向的信号,它将数据由从机传输到主机。MOSI输入/输出主出从入,MOSI信号是一个单向的信号,它将数据从主机传输到从机。SPI主机SPI从机1SPI从机2STESPIBUSP0.1P0.2nCSnCS作SPI主机时,STE要接上拉电阻MSP430G2553引脚图STE引脚作用STE:从机模式发送接收允许控制引脚,控制多主从系统中的多个从机。该引脚不用于3线SPI操作,可以在4线SPI操作中使多主机共享总线,避免发生冲突。4线SPI操作主模式中,STE的含义如下:SIMO和SCLK被强制进入输入状态SIMO和SCLK正常操作4线SPI操作从模式中,STE的含义如下:允许从机发送接收数据,SIMO正常操作禁止从机发送接收数据,SIMO被强制进入输入状态SPI数据传输数据传输格式:通常是高位(MSB)在前,低位(LSB)在后。一些增强型MCU中可以通过软件设置高位在前或低位在前。下面以8位数据的传输为例,看一下4种不同数据传输格式的时序。首先介绍两个概念:1.时钟极性:表示时钟信号在空闲时是高电平还是低电平。2.时钟相位:决定数据是在SCK的起始沿采样还是在SCK的结束沿采样。SPI传输时序时钟相位为1时钟前沿数据输出时钟后沿数据采样时钟信号极性0极性1从机选择时钟相位控制为0时钟前沿数据采样时钟后沿数据输出Bit112345678Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit8Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit8Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit812345678SCK(CPOL=0)SCK(CPOL=1)SSELCPHA=0Cycle#CPHA=0MOSI(CPHA=0)MISO(CPHA=0)CPHA=1Cycle#CPHA=1MOSI(CPHA=1)MISO(CPHA=1)Bit2Bit3Bit4Bit5Bit6Bit7Bit8时钟前沿输出时钟后沿采样时钟前沿采样时钟后沿输出传输模式根据时钟极性(CPOL)及相位(CPHA)不同可以组合成4种工作模式:SPI0,SPI1,SP2,SP3.(1)SPI0:CPOL=0,CPHA=0(2)SPI1:CPOL=0,CPHA=1(3)SPI2:CPOL=1,CPHA=0(4)SPI3:CPOL=1,CPHA=1传输模式时钟极性(CPOL)定义了时钟空闲状态电平,对传输协议没有重大影响。CPOL=0:时钟空闲状态为低电平。CPOL=1:时钟空闲状态为高电平。传输模式时钟相位(CPHA)定义数据的采样时间。CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。特点优点:(1)接口简单,利于硬件设计与实现。(2)时钟速度快,且没有系统开销。(3)相对抗干扰能力强,传输稳定。特点缺点:(1)缺乏流控制机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。因此,需要软件弥补,增加了软件开发工作量。(2)没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构。通用串行通信接口(USCI)模块通用串行通信接口(USCI)模块支持多种串行通信模式。不同的USCI模块支持不同的模式USCI_Ax模块支持:UART模式IrDA通信的脉冲整形LIN通信的自动波特率检测SPI模式USCI_Bx模块支持:I2C模式SPI模式MSP430模块特点MSP430的SPI模块有如下特点:支持3线或4线SPI操作支持7位或8位数据格式接收和发送有单独的移位寄存器接收和发送有独立的缓冲器接收和发送有独立的中断能力时钟的极性和相位可编程主模式的时钟频率可编程传输速率可编程支持连续收发操作支持主从方式主模式MSP430USCI作为主机、外围设备作为从机从模式外围设备作为主机,MSP430USCI作为从机SPI模式下可用的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为例,介绍相关寄存器UCB控制寄存器UCBxCTL1(USCI_Bxcontrolregister)00:保留01:ACLK10:SMCLK11:SMCLK0:不允许软件复位1:允许软件复位0:前沿采样,后沿输出1:前沿输出,后沿采样0:从机模式1:主机模式00:三线制01:四线制,UCxSTE=1选择从机10:四线制,UCxSTE=0选择从机11:I2C模式0:异步通信1:同步通信0:时钟空闲状态为低电平1:时钟空闲状态为高电平UCB控制寄存器UCBxCTL0(USCI_Bxcontrolregister)0:LSBfirst1:MSBfirst0:8-bitdata1:7-bitdata波特率控制寄存器UCBxBR0和UCBxBR1UCBxBR0是波特率发生器的低8位;UCBxBR1是波特率发生器的高8位.串口中断允许寄存器UCBxIE0:发送中断禁止1:发送中断允许0:接收中断禁止1:接收中断允许串口中断标志寄存器UCBxIFG1:发送缓冲器为空1:接收缓冲器为空串口中断向量值寄存器UCBxIV00:没有中断02:Interruptsource:Datareceived;Interruptflag:UCRXIFG;Interruptpriority:Highest04:Interruptsource:Transmitbufferempty;Interruptflag:UCTXIFG;Interruptpriority:Lowest串口中断缓冲器UCBxRXBUF和UCBxTXBUFUCRXBUFx:接收缓冲器UCTXBUFx:发送缓冲器应用示例SPI主机与从机通过三线SPI接口通信,主机发送数据给从机,同时又接收从机发来的数据,发送数据从0x01开始递增,从机接收到数据,就立马发出,主机接到这个数据,进入中断如果发送和接收数据相同,则点亮LED灯,否则熄灭。波特率为500kbps程序流程图RXISR初始化SPI模块初始化发送数据MST_Data判断发送缓冲是否为空,若是,则发送第一个字符判断发送缓冲是否为空,为空说明上次发送完毕判断本次接收到的字符和上次发送是否相同,相同则亮灯发送数据自加1,并赋值给发送缓冲主机RXISR初始化SPI模块判断发送缓冲是否为空,为空说明上次发送完毕本次接收到的数据赋值给发送缓冲从机主机——端口初始化P8SEL|=BIT4+BIT5+BIT6;P8DIR|=BIT4+BIT5+BIT6;P1DIR|=BIT0+BIT1;P1SEL|=BIT0+BIT1;选择P1.1~P1.0端口为输出选择P1.1~P1.0端口为输出选择P8.4~P8.6为外设功能选择P8.4~P8.6端口方向为输出主机——SPI模块初始化UCB1CTL1|=UCSWRST;UCB1CTL0|=UCMST+UCSYNC+UCCKPL+UCMSB;UCB1CTL1|=UCSSEL_2;UCB1BR0=2;UCB1BR1=0;UCB1IE|=UCRXIE;UCB1CTL1&=~UCSWRST选择SMCLKUSCI_Bx模块逻辑复位3线,8位,主机模式,时钟极性高,MSB先发送配置波特率打开SPI中断USCI_Bx复位释放主机——其他配置MST_Data=0x01;SLV_Data=0x00;P1OUT|=BIT1;__delay_cycles(100);while(!(UCB1IFG&UCTXIFG));UCB1TXBUF=MST_Data;主机初始化数据从机初始化数据延时判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕发送第一个字符从机选择引脚主机——接收中断#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内部电阻选择P8.4~P8.6为外设功能选择P8.4~P8.6端口方向为输出P1.4上升沿捕获,进入中断P1.4IFG清零P1.4中断使能主机——SPI模块初始化UCB1CTL1|=UCSWRST;UCB1CTL0|=UCSYNC+UCCKPL+UCMSB;UCB1CTL1&=~UCSWRSTUSCI_
本文标题:MSP430同步串行通信SPI
链接地址:https://www.777doc.com/doc-309900 .html