




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、同步串行通信同步串行通信SPI内容提要内容提要SPI总线协议总线协议MSP430 SPI模块模块SPI应用应用SPI总线介绍总线介绍SPI接口是接口是Motorola首先提出的首先提出的全双工全双工三三/四线四线同步同步串行外串行外围接口,采用主从模式架构,支持多从设备应用,一般只围接口,采用主从模式架构,支持多从设备应用,一般只支持单主设备。支持单主设备。利用利用34条线完成两个芯片之间的双工高速通信。两条数条线完成两个芯片之间的双工高速通信。两条数据线用于收发数据,一条时钟线用于同步,一条作为从机据线用于收发数据,一条时钟线用于同步,一条作为从机选择。选择。时钟由主设备控制,时钟由主设备控
2、制,当主机发送一字节数据(通过主出从当主机发送一字节数据(通过主出从入入MOSI引脚)的同时,从机返回一字节数据(通过引脚)的同时,从机返回一字节数据(通过主入主入从出从出MISO引脚)。引脚)。总线上允许连接多个设备,总线上允许连接多个设备,在同一时刻只允许一个主机操在同一时刻只允许一个主机操作总线,并且同时只能与一个从机通信。主机控制数据的作总线,并且同时只能与一个从机通信。主机控制数据的传输过程。传输过程。目前应用中的数据速率可达目前应用中的数据速率可达Mbps级。级。一、一、SPI总线协议总线协议 SPI总线可在软件的控制下构成各种简单的或复杂的系统: 1个主MCU和几个从MCU 几个
3、从MCU相互连接构成多主机系统(分布式系统) 1个主MCU和1个或几个从I/O设备 SPI总线结构总线结构SPI典型结构如下:典型结构如下:SPI工作模式工作模式 主机模式:主机模式: 当器件作为主机时,使用一个当器件作为主机时,使用一个IO引脚拉低相应从机的引脚拉低相应从机的选择引脚选择引脚(STE),传输的起始由主机发送数据来启动,时,传输的起始由主机发送数据来启动,时钟钟(SCK)信号由主机产生。通过信号由主机产生。通过MOSI发送数据,同时通发送数据,同时通过过MISO引脚接收从机发出的数据。引脚接收从机发出的数据。 从机模式:从机模式: 当器件作为从机时,传输在从机选择引脚当器件作为
4、从机时,传输在从机选择引脚(STE)被主被主机拉低后开始,接收主机输出的时钟信号,在读取主机数机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过据的同时通过MISO引脚输出数据。引脚输出数据。SPI电气连接电气连接以线以线SPI为例,其通信时需要的为例,其通信时需要的4个引脚分别为:个引脚分别为:SPI主机主机SPI从机从机1SPI从机从机2STESPI BUSP0.1P0.2nCSnCS作作SPI主机时,主机时,STE要接上要接上拉电阻拉电阻MSP430G2553引脚图引脚图STE引脚作用引脚作用STE:从机模式发送接收允许控制引脚,控制多主从系统:从机模式发送接收允许控制引脚,
5、控制多主从系统中的多个从机。该引脚不用于中的多个从机。该引脚不用于3线线SPI操作,可以在操作,可以在4线线SPI操作中使多主机共享总线,避免发生冲突。操作中使多主机共享总线,避免发生冲突。4线线SPI操作主模式中,操作主模式中,STE的含义如下:的含义如下:SIMO和和SCLK被强制进入输入状态被强制进入输入状态SIMO和和SCLK正常操作正常操作4线线SPI操作从模式中,操作从模式中,STE的含义如下:的含义如下:允许从机发送接收数据,允许从机发送接收数据,SIMO正常操作正常操作禁止从机发送接收数据,禁止从机发送接收数据,SIMO被强制进入输入状态被强制进入输入状态SPI数据传输数据传输
6、数据传输格式:数据传输格式: 通常是高位通常是高位(MSB)在前,低位在前,低位(LSB)在后。一些增在后。一些增强型强型MCU中可以通过软件设置高位在前或低位在前。中可以通过软件设置高位在前或低位在前。 下面以位数据的传输为例,看一下种不同数据传输下面以位数据的传输为例,看一下种不同数据传输格式的时序。首先介绍两个概念:格式的时序。首先介绍两个概念:1.时钟极性:时钟极性:表示时钟信号在空闲时是高电平还是低电表示时钟信号在空闲时是高电平还是低电平。平。2.时钟相位:时钟相位:决定数据是在决定数据是在SCK的起始沿采样还是在的起始沿采样还是在SCK的结束沿采样。的结束沿采样。SPI传输时序传输
7、时序时钟相位为时钟相位为1 1时钟前沿数时钟前沿数据输出据输出时钟后沿数时钟后沿数据采样据采样时钟信号时钟信号极性极性0 0极性极性1 1从机选择从机选择时钟相位时钟相位控制为控制为0 0时钟前沿时钟前沿数据采样数据采样时钟后沿时钟后沿数据输出数据输出时钟前沿输出时钟前沿输出时钟后沿采样时钟后沿采样时钟前沿采样时钟前沿采样时钟后沿输出时钟后沿输出传输模式传输模式根据时钟极性根据时钟极性(CPOL)及相位及相位(CPHA)不同可以组合成不同可以组合成4种工作模式:种工作模式:SPI0,SPI1,SP2,SP3.(1)SPI0:CPOL=0,CPHA=0(2)SPI1:CPOL=0,CPHA=1(
8、3)SPI2:CPOL=1,CPHA=0(4)SPI3:CPOL=1,CPHA=1传输模式传输模式时钟极性时钟极性(CPOL)定义了时钟空闲状态电平,定义了时钟空闲状态电平,对传输协议没有重大影响。对传输协议没有重大影响。CPOL=0:时钟空闲状态为低电平。:时钟空闲状态为低电平。CPOL=1:时钟空闲状态为高电平。:时钟空闲状态为高电平。传输模式传输模式时钟相位时钟相位(CPHA)定义数据的采样时间。定义数据的采样时间。CPHA=0:在时钟的第一个跳变沿:在时钟的第一个跳变沿(上升沿上升沿或下降沿或下降沿)进行数据采样。进行数据采样。CPHA=1:在时钟的第二个跳变沿:在时钟的第二个跳变沿(
9、上升沿上升沿或下降沿或下降沿)进行数据采样。进行数据采样。特点特点优点:优点:(1)接口简单,利于硬件设计与实现。)接口简单,利于硬件设计与实现。(2)时钟速度快,且没有系统开销。)时钟速度快,且没有系统开销。(3)相对抗干扰能力强,传输稳定。)相对抗干扰能力强,传输稳定。特点特点 缺点:缺点:(1)缺乏流控制机制,无论主器件还是从器)缺乏流控制机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道件均不对消息进行确认,主器件无法知道从器件是否繁忙。因此,需要软件弥补,从器件是否繁忙。因此,需要软件弥补,增加了软件开发工作量。增加了软件开发工作量。(2)没有多主器件协议,必须采用很复杂的
10、)没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构。软件和外部逻辑来实现多主器件架构。通用串行通信接口通用串行通信接口(USCI)模块模块通用串行通信接口通用串行通信接口(USCI)模块支持多种串行通信模式。不模块支持多种串行通信模式。不同的同的USCI 模块支持不同的模式模块支持不同的模式USCI_Ax 模块支持:模块支持:UART 模式模式IrDA 通信的脉冲整形通信的脉冲整形LIN 通信的自动波特率检测通信的自动波特率检测SPI 模式模式USCI_Bx 模块支持:模块支持:I2C 模式模式SPI 模式模式MSP430模块特点模块特点MSP430的的SPI模块有如下特点:
11、模块有如下特点:支持支持3线或线或4线线SPI操作操作支持支持7位或位或8位数据格式位数据格式接收和发送有单独的移位寄存器接收和发送有单独的移位寄存器接收和发送有独立的缓冲器接收和发送有独立的缓冲器接收和发送有独立的中断能力接收和发送有独立的中断能力时钟的极性和相位可编程时钟的极性和相位可编程主模式的时钟频率可编程主模式的时钟频率可编程传输速率可编程传输速率可编程支持连续收发操作支持连续收发操作支持主从方式支持主从方式主模式主模式MSP430 USCI作为主机、外围设备作为从机作为主机、外围设备作为从机从模式从模式外围设备外围设备作为主机,作为主机,MSP430 USCI作为从机作为从机SPI
12、模式下可用的模式下可用的USCI寄存器寄存器USCI_Ax和和USCI_Bx都有都有SPI模块,下面以模块,下面以USCI_Bx为例,介绍相关寄存器为例,介绍相关寄存器UCB控制寄存器控制寄存器 UCBxCTL1(USCI_Bx control register)00: 保留保留01: ACLK10:SMCLK11:SMCLK0: 不允许软件复位不允许软件复位1: 允许软件复位允许软件复位0: 前沿采样,后沿输出前沿采样,后沿输出1: 前沿输出,后沿采样前沿输出,后沿采样0: 从机模式从机模式1: 主机模式主机模式00: 三线制三线制01:四线制,四线制,UCxSTE=1选择从机选择从机10:
13、四线制,四线制,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位位.串口中断允许寄存器
14、串口中断允许寄存器 UCBxIE0: 发送中断禁止发送中断禁止1: 发送中断允许发送中断允许0: 接收中断禁止接收中断禁止1: 接收中断允许接收中断允许串口中断标志寄存器串口中断标志寄存器 UCBxIFG1: 发送缓冲器为空发送缓冲器为空1: 接收接收缓冲器为空缓冲器为空串口中断向量值寄存器串口中断向量值寄存器 UCBxIV00: 没有中断没有中断02:Interrupt source:Data received;Interrupt flag:UCRXIFG; Interrupt priority:Highest 04:Interrupt source:Transmit buffer empt
15、y;Interrupt flag:UCTXIFG; Interrupt priority:Lowest串口中断缓冲器串口中断缓冲器 UCBxRXBUF和和UCBxTXBUFUCRXBUFx: 接收缓冲器接收缓冲器UCTXBUFx: 发送缓冲器发送缓冲器应用示例应用示例 SPI主机与从机通过三线主机与从机通过三线SPI接口通信,主机发送数据给从机,同时接口通信,主机发送数据给从机,同时又接收从机发来的数据,发送数据从又接收从机发来的数据,发送数据从0 x01开始递增,从机接收到数据,开始递增,从机接收到数据,就立马发出,主机接到这个数据,进入中断如果发送和接收数据相同,就立马发出,主机接到这个数
16、据,进入中断如果发送和接收数据相同,则点亮则点亮LED灯,否则熄灭。波特率为灯,否则熄灭。波特率为500kbps程序流程图程序流程图RX ISR初始化初始化SPI模块模块初始化发送数据初始化发送数据MST_Data判断发送缓冲是否为空,判断发送缓冲是否为空,若是,则发送第一个字符若是,则发送第一个字符判断发送缓冲是否为空,判断发送缓冲是否为空,为空说明上次发送完毕为空说明上次发送完毕判断本次接收到的字符判断本次接收到的字符和上次发送是否相同,和上次发送是否相同,相同则亮灯相同则亮灯发送数据自加发送数据自加1,并赋值给发送缓冲并赋值给发送缓冲 主机主机RXISR初始化初始化SPI模块模块判断发送
17、缓冲是否为空,判断发送缓冲是否为空,为空说明上次发送完毕为空说明上次发送完毕本次接收到的数据本次接收到的数据赋值给发送缓冲赋值给发送缓冲 从机从机主机主机端口初始化端口初始化 P8SEL |= 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 |
18、= 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 = 0 x01; SLV_Data = 0 x00; P1OUT |= B
19、IT1; _delay_cycles(100); while (!(UC B1IFG&UCTXIFG); UC B1TXBUF = MST_Data;主机初始化数据主机初始化数据从机从机初始化初始化数据数据延时延时判断发送缓冲是否为空,如果为空,判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕等待直到数据发送完毕发送第一个字符发送第一个字符从机选择引脚从机选择引脚主机主机接收中断接收中断#pragma vector=USCI_ B1_VECTOR_interrupt void USCI_ B1_ISR(vo
20、id) 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; 判断发送缓冲是否为空,如果为空,判断发送缓冲是否为空,如果为空,标志位置位,则说
21、明上个数据未发送完毕,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕等待直到数据发送完毕 如果接收与发送相同,点亮如果接收与发送相同,点亮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端口方向为输出端口方向为输出
22、P1.4上升沿捕获,进入中断上升沿捕获,进入中断P1.4 IFG 清零清零P1.4中断使能中断使能主机主机SPI模块初始化模块初始化UCB1CTL1 |= UCSWRST;UCB1CTL0 |= UCSYNC+UCCKPL+UCMSB; UCB1CTL1 &= UCSWRSTUSCI_Bx模块逻辑复位模块逻辑复位3线,线,8位,主机模式,位,主机模式,时钟极性高,时钟极性高,MSB先发送先发送USCI_Bx复位释放复位释放从机从机接收中断接收中断#pragma vector=USCI_ B1_VECTOR_interrupt void USCI_ B1_ISR(void) switch
23、(_even_in_range(UC B1IV,4) case 0: break; case 2: while (!(UC B1IFG&UCTXIFG); UCA0TXBUF = UCA0RXBUF; break; case 4: break; default: break; 判断发送缓冲是否为空,如果为空,判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕等待直到数据发送完毕发送下一个字符发送下一个字符从机从机主机开始工作提示中断主机开始工作提示中断#pragma vector=PORT1_VECTOR_i
24、nterrupt 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 Out (UCA0SIMO) | | LED -|P1.0 P1.1|- Data In (UCA0SOMI) | | Slave r
25、eset 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 |= UCSWRST; P
26、1OUT = 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 modulatio
27、n 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;
28、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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公交车火灾应急预案(3篇)
- 2025年软件水平技术员试题及答案深度分析
- 行政管理实际案例试题及答案
- 风险识别对公司战略修订的支持作用试题及答案
- 遗嘱与继承法的规定试题及答案
- 网络管理员考试多样化试题及答案
- 软件设计师考试灵活应变能力的提升与实践试题及答案
- 2025二级VB考试要点试题分析
- 软硬件协同设计试题及答案
- 《2025续签劳动合同 范文》
- 汽煤柴油加氢装置操作工(技师)考试复习题库宝典(含答案)
- 交通运输布局对区域发展的影响-扬州的兴衰高一地理人教版(2019)必修第二册
- 从业人员健康及卫生管理制度
- 德阳市绵竹市2023年三下数学期末含解析
- 2023年福建省福州市八县一中联考高一化学第二学期期末达标测试试题含解析
- 医学专题-呼吸困难识别、处理与转运原则
- 管理英语3课件
- 七年级-体育与健康基础知识考核试题
- 同济大学实验报告封面
- 《医学影像诊断学》分章节试题库含答案大全
- 申根签证申请表
评论
0/150
提交评论