MSP430 SPI 入门学习
基本简介
这次MSP430入门介绍是基于MSP430FR2433 Lunchpad进行学习。从小白开始进行SPI学习,理解使用SPI模块。如有错误的地方,大家多多指正。
MSP430 User Guide 学习
每个人学习MSP430的方法是不一样的,我习惯第一步先从User Guide开始。
文件:MSP430FR4xx and MSP430FR2xx Family User’s Guide.pdf
章节:Chapter 23 eUSCI - SPI Mode
23.1 增强型通用串行通信接口(eUSCI_A, eUSCI_B) 概要
eUSCI_A和eUSCI_B都支持SPI串行通信。
23.2 eUSCI 介绍 - SPI模式
在同步模式下(UCSYNC bit = 1), eUSCI模块通过3、4个管脚(UCxSIMO, UCxSOMI, UCxCLK, and UCxSTE)将430设备与外部系统进行连接。当UCSYNC = 1时,SPI模式被选择。3管脚还是4管脚设置是由UCMODEx位进行设置。
SPI模式的特点:
(1)7-8位数据长度
(2)最高位有效或者最低位有效可选的数据接收和发送
(3)3管脚或者4管脚的SPI操作
(4)主/从模式
(5)独立的接收和发送移位寄存器
(6)独立的接收和发送缓冲寄存器
(7)连续的接收和发送操作
(8)可选时钟极性和相位
(9)主模式下,时钟频率可编程
(10)独立的接收和发送中断
(11)从机可以操作在LPM4模式
图23-1显示了eUSCI配置成SPI模式的结构图。
23.3 eUSCI 操作 - SPI模式
在SPI模式,多个设备之间串行数据的发送和接收是由主机提供的时钟进行的。主机有一个额外的管脚UCxSTE来控制使能从机接收和发送数据。
3或4个信号用于SPI数据交换
(1)UCxSIMO – 从输入主输出
(2)UCxSOMI – 从输出主输入
(3)UCxCLK – eUSCI SPI clock 主机输出时钟,从机接收时钟
(4)UCxSTE – 从机使能
UCxSTE 用于4线模式,此时允许在1条总线有多个主机,它不用于3线模式。表23-1 描述了UCxSTE操作。
23.3.1 eUSCI 初始化和复位(Reset)
The eUSCI 会被 PUC 或者 UCSWRST bit进行复位. PUC后UCSWRST bit 会被自动置位使得eUSCI保持在Reset状态。当UCSWRST置位时UCRXIE,UCTXIE, UCRXIFG, UCOE, 和 UCFE bits会复位, UCTXIFG标志位会置位。清除UCSWRST会释放eUSCI使其进入运转状态。
初始化或者重新配置eUSCI模块 |
---|
1. 置位UCSWRST |
2. 通过UCSWRST = 1 初始化所有的eUSCI寄存器(包括UCxCTL1) |
3. 配置端口 |
4. 软件清除UCSWRST |
5. 设置UCRXIE or UCTXIE使能中断(可选) |
23.3.2 字符格式
工作在SPI下的eUSCI模块支持7位/8位的字符长度,它由UC7BIT位进行设置。在7位数据模式下,UCxRXBUF是低有效位对齐,最高有效位总是复位。UCMSB控制着数据传送的方向,是高位在前还是低位在前。
23.3.3 主模式
图23-2显示了eUSCI作为主机模式工作在3线或者4线的配置。
当数据被移入到发送缓冲器中UCxTXBUF,eUSCI开始了数据的发送。当TX移位寄存器空的时候,UCxTXBUF的数据移位到TX移位寄存器。启动UCxSIMO的数据传输。UCMSB的设置决定了该数据是MSB在前还是LSB在前。UCxSOMI中的数据在相反的时钟沿被移入到接收移位寄存器中。
当主机接收到字符后,接收数据从接收移位寄存器移入接收缓冲器UCxRXBUF,同时接收中断标志位UCRXIFG被置位,这标志着RX和TX操作已经完成。
发送中断标志位UCTXIFG置位,表明数据已经由UCxTXBUF移位到TX移位寄存器,UCxTXBUF已经准备好接收新的数据。它不表示RX和TX操作已经完成。
主模式下为了USCI模块接收数据,数据必须写入UCxTXBUF,因为接收和发送数据是同步的。
这有两种不同的选项来配置eUSCI作为4线的主机。
(1)第四个管脚被用来输入来阻止和其他主机产生冲突(UCSTEM = 0)。
(2)第四个管脚被用来作为输出产生从机使能信号(UCSTEM = 1)。
UCSTEM位用来选择相应的选项。
23.3.3.1 4线制 SPI 主模式(UCSTEM = 0)
在4线制主模式下(UCSTEM = 0), UCxSTE 是数字输入端口来阻止和其他的主机产生冲突,如表23-1所示。
当UCxSTE处于主机-非活动状态时,UCSTEM = 0:
(1)UCxSIMO 和 UCxCLK 设置为输入状态,并且不再驱动总线。
(2)错误位UCFE置位,表明违反通信完整性,需要用户处理。
(3)内部状态机复位,移位操作终止。
如果UCxSTE保持主机在不活动状态下,将数据写入UCxTXBUF中,UCxSTE一旦转换到主机活动状态,立即发送数据。如果UCxSTE转换到主机不活动状态,而致使正在进行的数据发送停止,那么UCxSTE转换回主机活动状态下,数据必须再次写入UCxTXBUF。
UCxSTE信号不会用在3线制主机模式。
23.3.3.2 4线制 SPI 主模式(UCSTEM = 1)
如果UCSTEM = 1 在4线制主机模式,UCxSTE 是数据输出端口。这种模式下,UCxSTE会自动生成单个从机的从机使能信号。对应的行为可以看图23-4.
如果有多个从机,这个功能不能使用,软件需要使用通用I/O口来产生每个从机的单独的STE信号。
23.3.4从模式
图23-3显示了eUSCI 作为从模式的3线制和4线制的配置
UCxCLK被用作SPI时钟的输入,它必须有外部主机提供。数据传输速率由外部主机时钟决定而不是内部的时钟发生器。UCxCLK开始前,写入UCxTXBUF和移入TX移位寄存器的数据通过UCxSOMI发送。UCxSIMO中的数据在UCxCLK的反向沿移入到接收移位寄存器。当接收到设定的位数时,移入到接收缓冲器UCxBUF。
当数据从RX移位寄存器转移到接收缓冲器UCxRXBUF中时,UCRXIFG标志位置位,指示数据已经被接收到。当之前接收的数据没有从UCxRXBUF中读出而新的数据被移入到UCxRXBUF中时UCOE被置位发生overrun错误。
23.3.4.1 4线SPI从模式
在4线从模式,UCxSTE是数据输入端口,用来使能从机发送和接收,这个信号是由主机驱动的。当UCxSTE在从机活动状态下,从机会正常运行。当UCxSTE在从机不活动状态:
(1)UCxSIMO任何的接收活动会被停止。
(2)UCxSOMI会被设置成输入方向。
(3)移位操作会被停止,直到UCxSTE转换到从机发送活动状态。
在3线制从机模式下,不使用UCxSTE输入信号。
23.3.5 SPI使能
当清除UCSWRST位,使能eUSCI模块,它可以进行发送和接收。在主模式下,位时钟(bit clock)发生器已经就绪,但是不会产生任何时钟。在从模式,位时钟发生器被禁止,它的时钟信号由主机提供。
UCBUSY=1 说明发送和接收操作正在进行。
PUC和UCSWRST位会立即禁止到eUSCI,任何的传输都会被中断。
23.3.5.1发送使能
在主模式下,通过UCxTXBUF写操作会激活位时钟发生器(bit clock)开始发送数据。
在从模式下,当主机提供时钟,开始发送数据。4线制下,UCxSTE处于从活动状态下开始发送数据。
23.3.5.2接收使能
当发送处于活动状态下,SPI开始接收数据。接收和发送同时进行。
23.3.6串行时钟控制
UCxCLK是由SPI总线上的主机提供。UCMST=1,位时钟由eUSCI 位时钟发生器通过UCxCLK管脚提供。通过UCSSELx位可以选择生成bit clock的时钟源。当UCMST=0,eUSCI时钟是由主机UCxCLK管脚提供的。从机的位时钟发生器没有使用。不用在乎UCSSELx位。SPI接收和发送是并行的需要用到相同的时钟。
为速率控制寄存器UCxxBRW中的UCBRx的16位数值是USCI时钟源BRCLK的分频因子。当UCBRx=0,主模式能产生最大的bitclock是BRCLK。调制器没有用在SPI模式,当使用eUSCI_A时UCAxMCTL应当被清除。UCAxCLK或者UCBxCLK的频率公式如下:
f B i t C l o c k = f B R C L K / U C B R x f_{BitClock} =f_{BRCLK}/{UCBRx} fBitClock=f