MSP430同步串行通信SPI_第1页
MSP430同步串行通信SPI_第2页
MSP430同步串行通信SPI_第3页
MSP430同步串行通信SPI_第4页
MSP430同步串行通信SPI_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、同步串行通信SPI内容提要SPI总线协议MSP430 SPI模块SPI应用SPI总线介绍SPI接口是Motorola首先提出的全双工三/四线同步串行外围接口,采用主从模式架构,支持多从设备应用,一般只支持单主设备。利用34条线完成两个芯片之间的双工高速通信。两条数据线用于收发数据,一条时钟线用于同步,一条作为从机选择。时钟由主设备控制,当主机发送一字节数据(通过主出从入MOSI引脚)的同时,从机返回一字节数据(通过主入从出MISO引脚)。总线上允许连接多个设备,在同一时刻只允许一个主机操作总线,并且同时只能与一个从机通信。主机控制数据的传输过程。目前应用中的数据速率可达Mbps级。一、SPI总

2、线协议 SPI总线可在软件的控制下构成各种简单的或复杂的系统:1个主MCU和几个从MCU几个从MCU相互连接构成多主机系统(分布式系统) 1个主MCU和1个或几个从I/O设备 SPI总线结构SPI典型结构如下:SPI工作模式 主机模式: 当器件作为主机时,使用一个IO引脚拉低相应从机的选择引脚(STE),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生。通过MOSI发送数据,同时通过MISO引脚接收从机发出的数据。 从机模式: 当器件作为从机时,传输在从机选择引脚(STE)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。SPI电气连接以线SP

3、I为例,其通信时需要的4个引脚分别为:引脚名称类型描述SCK输入/输出串行时钟,用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机驱动,并且从机接收STE输入从机选择,SPI从机选择信号是一个低有效信号,用于指示被选择参与数据传输的从机。每个从机都有各自特定的从机选择输入信号。MISO输入/输出主入从出,MISO信号是一个单向的信号,它将数据由从机传输到主机。MOSI输入/输出主出从入,MOSI信号是一个单向的信号,它将数据从主机传输到从机。SPI主机SPI从机1SPI从机2STESPI BUSP0.1P0.2nCSnCS作SPI主机时,STE要接上拉电阻MSP430G2553引脚图

4、STE引脚作用STE:从机模式发送接收允许控制引脚,控制多主从系统中的多个从机。该引脚不用于3线SPI操作,可以在4线SPI操作中使多主机共享总线,避免发生冲突。4线SPI操作主模式中,STE的含义如下:SIMO和SCLK被强制进入输入状态SIMO和SCLK正常操作4线SPI操作从模式中,STE的含义如下:允许从机发送接收数据,SIMO正常操作禁止从机发送接收数据,SIMO被强制进入输入状态SPI数据传输数据传输格式: 通常是高位(MSB)在前,低位(LSB)在后。一些增强型MCU中可以通过软件设置高位在前或低位在前。 下面以位数据的传输为例,看一下种不同数据传输格式的时序。首先介绍两个概念:

5、1.时钟极性:表示时钟信号在空闲时是高电平还是低电平。2.时钟相位:决定数据是在SCK的起始沿采样还是在SCK的结束沿采样。SPI传输时序时钟相位为1时钟前沿数据输出时钟后沿数据采样时钟信号极性0极性1从机选择时钟相位控制为0时钟前沿数据采样时钟后沿数据输出时钟前沿输出时钟后沿采样时钟前沿采样时钟后沿输出传输模式根据时钟极性(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传输模式时钟

6、极性(CPOL)定义了时钟空闲状态电平,对传输协议没有重大影响。CPOL=0:时钟空闲状态为低电平。CPOL=1:时钟空闲状态为高电平。传输模式时钟相位(CPHA)定义数据的采样时间。CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。特点优点:(1)接口简单,利于硬件设计与实现。(2)时钟速度快,且没有系统开销。(3)相对抗干扰能力强,传输稳定。特点 缺点:(1)缺乏流控制机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。因此,需要软件弥补,增加了软件开发工作量。(2)没有多主器件协议,

7、必须采用很复杂的软件和外部逻辑来实现多主器件架构。通用串行通信接口(USCI)模块通用串行通信接口(USCI)模块支持多种串行通信模式。不同的USCI 模块支持不同的模式USCI_Ax 模块支持:UART 模式IrDA 通信的脉冲整形LIN 通信的自动波特率检测SPI 模式USCI_Bx 模块支持:I2C 模式SPI 模式MSP430模块特点MSP430的SPI模块有如下特点:支持3线或4线SPI操作支持7位或8位数据格式接收和发送有单独的移位寄存器接收和发送有独立的缓冲器接收和发送有独立的中断能力时钟的极性和相位可编程主模式的时钟频率可编程传输速率可编程支持连续收发操作支持主从方式主模式MS

8、P430 USCI作为主机、外围设备作为从机从模式外围设备作为主机,MSP430 USCI作为从机SPI模式下可用的USCI寄存器名称描述访问复位值寄存器访问UCBxCTLW0USCI_Bx控制字0 读/写0001h字UCBxBRWUSCI_Bx波特率控制字读/写0000h字UCBxMCTLUSCI_Bx调制器控制 UCBxSTATUSCI_Bx状态寄存器 读/写00h字节UCBxRXBUFUSCI_Bx接收缓存读/写00h字节UCBxTXBUF USCI_Bx发送缓存读/写00h字节UCBxI2COAUSCI_Bx I2C本机地址 读/写0000h字UCBxI2CSAUSCI_Bx I2C从

9、机地址读/写0000h字UCBxICTL USCI_Bx中断控制读/写0200h 字UCBxIEUSCI_Bx中断使能读/写00h字节UCBxIFG USCI_Bx中断标志读/写02h字节UCBxIVUSCI_Bx中断向量 读0000h字USCI_Ax和USCI_Bx都有SPI模块,下面以USCI_Bx为例,介绍相关寄存器UCB控制寄存器 UCBxCTL1(USCI_Bx control register)00: 保留01: ACLK10:SMCLK11:SMCLK0: 不允许软件复位1: 允许软件复位0: 前沿采样,后沿输出1: 前沿输出,后沿采样0: 从机模式1: 主机模式00: 三线制0

10、1:四线制,UCxSTE=1选择从机10:四线制,UCxSTE=0选择从机11:I2C模式0: 异步通信1: 同步通信0: 时钟空闲状态为低电平1: 时钟空闲状态为高电平UCB控制寄存器 UCBxCTL0(USCI_Bx control register)0: LSB first1: MSB first0: 8-bit data1: 7-bit data波特率控制寄存器 UCBxBR0和UCBxBR1UCBxBR0是波特率发生器的低8位;UCBxBR1是波特率发生器的高8位.串口中断允许寄存器 UCBxIE0: 发送中断禁止1: 发送中断允许0: 接收中断禁止1: 接收中断允许串口中断标志寄存

11、器 UCBxIFG1: 发送缓冲器为空1: 接收缓冲器为空串口中断向量值寄存器 UCBxIV00: 没有中断02:Interrupt source:Data received;Interrupt flag:UCRXIFG; Interrupt priority:Highest 04:Interrupt source:Transmit buffer empty;Interrupt flag:UCTXIFG; Interrupt priority:Lowest串口中断缓冲器 UCBxRXBUF和UCBxTXBUFUCRXBUFx: 接收缓冲器UCTXBUFx: 发送缓冲器应用示例 SPI主机与从机

12、通过三线SPI接口通信,主机发送数据给从机,同时又接收从机发来的数据,发送数据从0 x01开始递增,从机接收到数据,就立马发出,主机接到这个数据,进入中断如果发送和接收数据相同,则点亮LED灯,否则熄灭。波特率为500kbps程序流程图RX ISR初始化SPI模块初始化发送数据MST_Data判断发送缓冲是否为空,若是,则发送第一个字符判断发送缓冲是否为空,为空说明上次发送完毕判断本次接收到的字符和上次发送是否相同,相同则亮灯发送数据自加1,并赋值给发送缓冲 主机RXISR初始化SPI模块判断发送缓冲是否为空,为空说明上次发送完毕本次接收到的数据赋值给发送缓冲 从机主机端口初始化 P8SEL

13、|= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1DIR |= BIT0 + BIT1; P1SEL |= BIT0 + BIT1;选择P1.1P1.0端口为输出选择P1.1P1.0端口为输出选择P8.4P8.6为外设功能选择P8.4P8.6端口方向为输出主机SPI模块初始化UCB1CTL1 |= UCSWRST;UCB1CTL0|=UCMST+UCSYNC+UCCKPL+UCMSB; UCB1CTL1 |= UCSSEL_2; UCB1BR0 = 2; UCB1BR1 = 0; UCB1IE |= UCRXIE; UCB1CTL1 &= UCSWRS

14、T选择SMCLKUSCI_Bx模块逻辑复位3线,8位,主机模式,时钟极性高,MSB先发送配置波特率打开SPI中断USCI_Bx复位释放主机其他配置 MST_Data = 0 x01; SLV_Data = 0 x00; P1OUT |= BIT1; _delay_cycles(100); while (!(UC B1IFG&UCTXIFG); UC B1TXBUF = MST_Data;主机初始化数据从机初始化数据延时判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕发送第一个字符从机选择引脚主机接收中断#pragma vector=USCI_ B1_V

15、ECTOR_interrupt void USCI_ B1_ISR(void) switch(_even_in_range(UC B1IV,4) case 0: break; case 2: while (!(UC B1IFG&UCTXIFG); if (UC B1RXBUF=SLV_Data) P1OUT |= 0 x01; else P1OUT &= 0 x01; MST_Data+; SLV_Data+; UCB1TXBUF = MST_Data; _delay_cycles(500); break; case 4: break; default: break; 判断发送缓冲是否为空,如

16、果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕 如果接收与发送相同,点亮LED发送下一个字符从机端口初始化 P8SEL |= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1REN |= BIT4; P1OUT |= BIT4; P1IES &=BIT4; P1IFG &=BIT4; P1IE |= BIT4;使能P1.4内部电阻选择P8.4P8.6为外设功能选择P8.4P8.6端口方向为输出P1.4上升沿捕获,进入中断P1.4 IFG 清零P1.4中断使能主机SPI模块初始化UCB1CTL1 |= UCSWRST;UCB1CTL0 |

17、= UCSYNC+UCCKPL+UCMSB; UCB1CTL1 &= UCSWRSTUSCI_Bx模块逻辑复位3线,8位,主机模式,时钟极性高,MSB先发送USCI_Bx复位释放从机接收中断#pragma vector=USCI_ B1_VECTOR_interrupt void USCI_ B1_ISR(void) switch(_even_in_range(UC B1IV,4) case 0: break; case 2: while (!(UC B1IFG&UCTXIFG); UCA0TXBUF = UCA0RXBUF; break; case 4: break; default: br

18、eak; 判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕发送下一个字符从机主机开始工作提示中断#pragma vector=PORT1_VECTOR_interrupt void Port_1(void) P1IFG &= BIT4; P1IE &= BIT4; UCB1CTL1 |= UCSWRST; UCB1CTL1 &= UCSWRST; UCB1IE |= UCRXIE;USCI_Bx复位释放主机准备就绪,USCI_Bx模块逻辑复位打开SPI中断 /| XIN|- | | | -|RST XOUT|- | | | P1.2|- Data Ou

19、t (UCA0SIMO) | | LED -|P1.0 P1.1|- Data In (UCA0SOMI) | | Slave reset Serial Clock Out (UCA0CLK)三线制主机模式多次发数据,每次发的数据都加1,第一次发1;同时也接收从机发过来的数据,第一次接0,依次加1.波特率为500kbps#include unsigned char MST_Data, SLV_Data;int main(void) volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer UCA0CTL1

20、|= UCSWRST; P1OUT = 0 x00; / P1 setup for LED & reset output P1DIR |= BIT0 + BIT5; / P1SEL = BIT1 + BIT2 + BIT4; P1SEL2 = BIT1 + BIT2 + BIT4; UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; / 3-pin, 8-bit SPI master UCA0CTL1 |= UCSSEL_2; / SMCLK UCA0BR0 |= 0 x02; / /2 UCA0BR1 = 0; / UCA0MCTL = 0; / No

21、modulation UCA0CTL1 &= UCSWRST; / *Initialize USCI state machine* IE2 |= UCA0RXIE; / Enable USCI0 RX interruptP1OUT &= BIT5; / Now with SPI signals initialized, P1OUT |= BIT5; / reset slave _delay_cycles(75); / Wait for slave to initialize MST_Data = 0 x01; / Initialize data values SLV_Data = 0 x00;

22、 UCA0TXBUF = MST_Data; / Transmit first character _bis_SR_register(LPM0_bits + GIE); / CPU off, enable interrupts#pragma vector=USCIAB0RX_VECTOR_interrupt void USCIA0RX_ISR(void) volatile unsigned int i; while (!(IFG2 & UCA0TXIFG); / USCI_A0 TX buffer ready? if (UCA0RXBUF = SLV_Data) / Test for correct character RXd P1OUT |= BIT0; / If correct, light LED else P1OUT &= BIT0; / If incorrect, clear LED MST_Data+; / Increment master value SLV_Data+; / Increment expected slave value UCA0TXBUF = MST_Data; / Send next value _delay_cycles(50); / Add time between transmissions to

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论