MSP430同步串行通信SPI全解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UCBxIE
UCBxIFG UCBxIV
USCI_Bx中断使能
USCI_Bx中断标志 USCI_Bx中断向量
读 /写
读 /写 读
00h
02h 0000h
字节
字节 字
UCB控制寄存器 UCBxCTL1
(USCI_Bx control register)
00: 保留 01: ACLK 10:SMCLK 11:SMCLK
P1OUT |= BIT1;
__delay_cycles(100);
从机选择引脚 延时 判断发送缓冲是否为空,如果为空, 标志位置位,则说明上个数据未发送完毕, 等待直到数据发送完毕 发送第一个字符
while (!(UC B1IFG&UCTXIFG));
UC B1TXBUF = MST_Data;
主机——接收中断
0: 发送中断禁止 1: 发送中断允许
0: 接收中断禁止 1: 接收中断允许
串口中断标志寄存器 UCBxIFG
1: 发送缓冲器为空
1: 接收缓冲器为空
串口中断向量值寄存器百度文库UCBxIV
00: 没有中断 02:Interrupt source:Data received;Interrupt flag:UCRXIFG; Interrupt priority:Highest 04:Interrupt source:Transmit buffer empty;Interrupt flag:UCTXIFG; Interrupt priority:Lowest
USCI_Bx模块逻辑复位 3线,8位,主机模式, 时钟极性高,MSB先发送
选择SMCLK
配置波特率
UCB1IE |= UCRXIE; UCB1CTL1 &= ~UCSWRST
打开SPI中断 USCI_Bx复位释放
主机——其他配置
MST_Data = 0x01;
SLV_Data = 0x00;
主机初始化数据 从机初始化数据
#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));
特点
优点: (1)接口简单,利于硬件设计与实现。 (2)时钟速度快,且没有系统开销。 (3)相对抗干扰能力强,传输稳定。
特点
缺点: (1)缺乏流控制机制,无论主器件还是从器 件均不对消息进行确认,主器件无法知道 从器件是否繁忙。因此,需要软件弥补, 增加了软件开发工作量。 (2)没有多主器件协议,必须采用很复杂的 软件和外部逻辑来实现多主器件架构。
SPI传输时序
时钟信号 极性0 极性1
SCK (CPOL = 0) SCK (CPOL = 1) SSEL CPHA = 0 Cycle # CPHA = 0 MOSI (CPHA = 0) MISO (CPHA = 0) CPHA = 1 Cycle # CPHA = 1 MOSI (CPHA = 1) MISO (CPHA = 1) 1 Bit 1 Bit 1 1 Bit 1 Bit 1 2 时钟前沿采样 3 4 Bit 2 Bit 2 5 6 Bit 6 Bit 6 7 Bit 7 Bit 7 8 Bit 8 Bit 8
同步串行通信SPI
内容提要
SPI总线协议 MSP430 SPI模块 SPI应用
一、SPI总线协议
SPI总线介绍
SPI接口是Motorola首先提出的全双工三/四线同步串行外 围接口,采用主从模式架构,支持多从设备应用,一般只 支持单主设备。 利用3~4条线完成两个芯片之间的双工高速通信。两条数 据线用于收发数据,一条时钟线用于同步,一条作为从机 选择。 时钟由主设备控制,当主机发送一字节数据(通过主出从 入MOSI引脚)的同时,从机返回一字节数据(通过主入 从出MISO引脚)。 总线上允许连接多个设备,在同一时刻只允许一个主机操 作总线,并且同时只能与一个从机通信。主机控制数据的 传输过程。 目前应用中的数据速率可达Mbps级。
...
被控器N
/SSN
SPI工作模式
主机模式: 当器件作为主机时,使用一个IO引脚拉低相应从机的 选择引脚(STE),传输的起始由主机发送数据来启动,时 钟(SCK)信号由主机产生。通过MOSI发送数据,同时通 过MISO引脚接收从机发出的数据。
从机模式: 当器件作为从机时,传输在从机选择引脚(STE)被主 机拉低后开始,接收主机输出的时钟信号,在读取主机数 据的同时通过MISO引脚输出数据。
从机选择
时钟相位 控制为0 时钟前沿 数据采样 时钟后沿 数据输出
Bit 3 Bit 4 Bit 5 时钟后沿输出 Bit 3 Bit 4 Bit 5
时钟相位为 1
时钟前沿数 据输出 时钟后沿数 据采样
时钟前沿输出 2 3 4
5
6 Bit 6 Bit 6
7 Bit 7 Bit 7
8 Bit 8 Bit 8
SPI数据传输
数据传输格式:
通常是高位(MSB)在前,低位(LSB)在后。一些增 强型MCU中可以通过软件设置高位在前或低位在前。
下面以8位数据的传输为例,看一下4种不同数据传输 格式的时序。首先介绍两个概念: 1.时钟极性:表示时钟信号在空闲时是高电平还是低电 平。 2.时钟相位:决定数据是在SCK的起始沿采样还是在 SCK的结束沿采样。
Bit时钟后沿采样 2 Bit 3 Bit 4 Bit 5 Bit 2 Bit 3 Bit 4 Bit 5
传输模式
根据时钟极性(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:在时钟的第二个跳变沿(上升沿 或下降沿)进行数据采样。
复位值 0001h 0000h 00h 00h 00h 0000h 0000h 0200h
寄存器访问 字 字 字节 字节 字节 字 字 字
UCBxCTLW0 USCI_Bx控制字0 UCBxBRW UCBxMCTL UCBxSTAT UCBxRXBUF UCBxTXBUF UCBxI2COA UCBxI2CSA UCBxICTL USCI_Bx波特率控制字 USCI_Bx调制器控制 USCI_Bx状态寄存器 USCI_Bx接收缓存 USCI_Bx发送缓存 USCI_Bx I2C本机地址 USCI_Bx I2C从机地址 USCI_Bx中断控制
0: 异步通信 1: 同步通信
00: 三线制 01:四线制,UCxSTE=1选择从机 10:四线制,UCxSTE=0选择从机 11:I2C模式
波特率控制寄存器 UCBxBR0和UCBxBR1
UCBxBR0是波特率发生器的低8位; UCBxBR1是波特率发生器的高8位.
串口中断允许寄存器 UCBxIE
P0.1 P0.2
SPI主机
MISO
MOSI
nCS
SPI从机1
作SPI主机时, STE要接上 拉电阻
STE
nCS SPI BUS
SPI从机2
MSP430G2553引脚图
STE引脚作用
STE:从机模式发送接收允许控制引脚,控制多主从系统 中的多个从机。该引脚不用于3线SPI操作,可以在4线 SPI操作中使多主机共享总线,避免发生冲突。 4线SPI操作主模式中,STE的含义如下: SIMO和SCLK被强制进入输入状态 SIMO和SCLK正常操作 4线SPI操作从模式中,STE的含义如下: 允许从机发送接收数据,SIMO正常操作 禁止从机发送接收数据,SIMO被强制进入输入状态
0: 不允许软件复位 1: 允许软件复位
UCB控制寄存器 UCBxCTL0
(USCI_Bx control register)
0: 从机模式 1: 主机模式 0: 8-bit data 1: 7-bit data
0: LSB first 1: MSB first 0: 时钟空闲状态为低电平 1: 时钟空闲状态为高电平 0: 前沿采样,后沿输出 1: 前沿输出,后沿采样
SPI电气连接
以4线SPI为例,其通信时需要的4个引脚分别为:
引脚名 称 SCK STE 类型 输入/输 出 输入 输入/输 出 输入/输 出 描述 串行时钟,用于同步SPI接口间数据传输的时钟信号。该时钟信号 总是由主机驱动,并且从机接收 从机选择,SPI从机选择信号是一个低有效信号,用于指示被选择 参与数据传输的从机。每个从机都有各自特定的从机选择输入信 号。 主入从出,MISO信号是一个单向的信号,它将数据由从机传输到 主机。 主出从入,MOSI信号是一个单向的信号,它将数据从主机传输到 从机。
通用串行通信接口(USCI)模块
通用串行通信接口(USCI)模块支持多种串行通信模式。不 同的USCI 模块支持不同的模式 USCI_Ax 模块支持: UART 模式 IrDA 通信的脉冲整形 LIN 通信的自动波特率检测 SPI 模式 USCI_Bx 模块支持: I2C 模式 SPI 模式
程序流程图
主机 初始化SPI模块 初始化发送数据 MST_Data RX ISR
判断发送缓冲是否为空, 若是,则发送第一个字符 判断发送缓冲是否为空, 为空说明上次发送完毕
从机
RX ISR
初始化SPI模块
判断发送缓冲是否为空, 为空说明上次发送完毕
判断本次接收到的字符 和上次发送是否相同, 相同则亮灯
串口中断缓冲器 UCBxRXBUF和UCBxTXBUF
UCRXBUFx: 接收缓冲器
UCTXBUFx: 发送缓冲器
应用示例
SPI主机与从机通过三线SPI接口通信,主机发送数据给从机,同时
又接收从机发来的数据,发送数据从0x01开始递增,从机接收到数据,
就立马发出,主机接到这个数据,进入中断如果发送和接收数据相同, 则点亮LED灯,否则熄灭。波特率为500kbps
SPI总线结构
SPI总线可在软件的控制下构成各种简单的或复杂的系统: • 1个主MCU和几个从MCU • 几个从MCU相互连接构成多主机系统(分布式系统) • 1个主MCU和1个或几个从I/O设备 <常用>
SPI典型结构如下:
SCK
主控器 MCU 被控器1
/SS1
MOSI MISO
被控器2
/SS2
MSP430模块特点
MSP430的SPI模块有如下特点: 支持3线或4线SPI操作 支持7位或8位数据格式 接收和发送有单独的移位寄存器 接收和发送有独立的缓冲器 接收和发送有独立的中断能力 时钟的极性和相位可编程 主模式的时钟频率可编程 传输速率可编程 支持连续收发操作 支持主从方式
选择P8.4~P8.6端口方向为输出 选择P1.1~P1.0端口为输出 选择P1.1~P1.0端口为输出
主机——SPI模块初始化
UCB1CTL1 |= UCSWRST;
UCB1CTL0|=UCMST+UCSYNC+ UCCKPL+UCMSB; UCB1CTL1 |= UCSSEL_2; UCB1BR0 = 2; UCB1BR1 = 0;
发送数据自加1, 并赋值给发送缓冲
本次接收到的数据 赋值给发送缓冲
主机——端口初始化
P8SEL |= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1DIR |= BIT0 + BIT1; P1SEL |= BIT0 + BIT1;
选择P8.4~P8.6为外设功能
主模式
MSP430 USCI作为主机、外围设备作为从机
从模式
外围设备作为主机,MSP430 USCI作为从机
SPI模式下可用的USCI寄存器
USCI_Ax和USCI_Bx都有SPI模块,下面以USCI_Bx为例,介绍相关寄存器
名称
描述
访问 读 /写 读 /写 读 /写 读 /写 读 /写 读 /写 读 /写 读 /写