目录
2.3 MSP432的SPI通信模式
MSP432单片机的eUSCI_A和eUSCI_B模块都支持SPI通信模式,板载SPI接口资源见下图:
MSP432的SPI通信模块特点如下:
-
7位or8位数据长度;
-
最高有效位在前或者最低有效位在前的数据发送和接收;
-
支持3线or4线SPI操作;
-
支持主机模式或从机模式;
-
具有独立的发送和接收移位寄存器和缓冲寄存器;
-
具有连续发送和接收能力;
-
时钟的极性和相位可编程;
-
主模式下,时钟频率可编程;
-
具有独立的接收和发送中断能力。
配置
寄存器UCATLW0/UCBTLW0
的
UCSYNC控制位
,控制eUSCI模块工作在SPI模式;配置
UCMODEx控制位
,控制SPI模块工作在3线or4线通信模式。SPI工作模式下的eUSCI模块结构框图如下:
SPI模式下,eUSCI模块由3个部分组成:①SPI接收逻辑(接收移位寄存器、接收缓冲寄存器、接收状态机),②SPI时钟发生器(产生SPI通信过程所需的时钟信号),③SPI发送逻辑(发送缓冲寄存器、发送移位寄存器、发送状态机)。
2.3.1 SPI的主机模式
当控制
寄存器UCATLW0/UCBTLW0
的
UCMST=1
时,MSP432的SPI通信模块工作在主机模
式:
-
eUSCI模块通过在UCxCLK引脚输出的时钟信号控制串行通信;
-
当发送移位寄存器为空时,已写入发送缓冲器的数据将移入发送移位寄存器,并启动UCxSIMO引脚发送(
UCMSB控制位
控制数据发送是最高有效位or最低有效位在前),当发送缓冲区为空时,中断标志位
UCTXIFG
置位,标志数据发送完成;
-
在与发送数据时相反的时钟沿处
,UCxSOMI引脚上的数据移入接收移位寄存器,当接收完所有选定位数时,接收移位寄存器中的数据移入接收缓冲寄存器,接收
中断标志位UCRXIFG
置为,标志数据接收完成。
-
当数据的发送与接收都完成时,
UCAxSTATW
寄存器
的
标志位UCBUSY=0
,反之为1
。
2.3.2 SPI的从机模式
当控制
寄存器UCATLW0/UCBTLW0
的
UCMST=0
时,MSP432的SPI通信模块工作在从机模式:
-
从机的UCxCLK引脚为输入状态,SPI通信所用时钟来源于外部主机;
-
发送缓冲寄存器移入发送移位寄存器的数据在主机UCxCLK信号作用下,通过从机的UCxSOMI引脚发送给主机,当发送缓冲区为空时,中断标志位
UCTXIFG
置位,标志数据发送完成。
-
在与发送数据时相反的时钟沿处
,UCxSIMO引脚上的串行数据移入接收移位寄存器,当接收移位寄存器中的数据全部移入接收缓冲寄存器时,置位接收
中断标志位UCRXIFG
,标志数据接收完成。当新数据被写入接收缓冲寄存器时,前一个数据还没有被取出时,则
溢出标志位UCOE
置位。
-
当数据的发送与接收都完成时,
UCAxSTATW
寄存器
的
标志位UCBUSY=0
,反之为1
。
2.3.3 串行时钟控制
若标志位UCMST=1,则表示SPI模块工作主机模式下,SPI模块的时钟发生器提供串行通信所需同步时钟,并由UCxCLK引脚输出。
根据时钟发生器结构图可知,
UCAxCTLW0寄存器
的
UCSSELx控制位
控制eUSCI时钟源BRCLK的选择,
UCAxBRW寄存器
的值UCxBRx控制BRCLK时钟源的分频因子,
UCAxCTLW0寄存器
的
CKPH
和
UCCKPL控制位
分别控制时钟相位与极性。
时钟频率
为:
时钟相位
与
时钟极性
:
MSP432的通信时序图:
PS:
1.在SPI模式下不使用调制,在eUSCI_A使用SPI模式时应清除UCAxMCTLW寄存器。
2. SPI的接收器和发送器并行工作,数据传输使用同一个时钟源,设备在一个时钟边沿发送数据,在另一个边沿接收数据。当MCU做从机时,时钟发生器虽然不需要提供串行时钟,但仍需设置时钟极性与相位,且与主机一致。
2.3.3 SPI中断
以eUSCI_A为例,
与SPI中断相关的寄存器
如下:
1. SPI发送中断操作:
使能发送中断(UCTXIE=1),当发送缓冲寄存器为空时,中断标志位UCTXIFG置位,产生中断请求。当将字符写入发送缓存寄存器时,中断标志位UCTXIFG自动复位。因此,可利用发送中断服务程序不断向发送缓冲寄存器写入新的数据。
PS:当UCTXIFG=0时,写数据至发送缓存寄存器,可能会导致错误数据发送。
2. SPI接收中断操作:
使能接收中断(UCRXIE=1),当接收缓冲寄存器接收所有选定位数的数据时,中断标志位UCRXIFG置位,产生中断请求。当接收缓存寄存器被读取时,中断标志位UCRXIFG自动复位。因此,可利用接收中断服务程序完成数据的接收。
3. eUSCI中断向量UCxIV
eUSCI模块只有一个中断向量,发送和接收共用该向量。eUSCI _Ax和eUSCI _Bx不共用同一个中断向量。
eUSCI中断标志具有不同的优先级,它们组合共用一个中断向量,即eUSCI为多源中断。中断向量寄存器UCxIV用来决定哪个中断标志请求产生中断。优先级最高的中断将会在UCxIV寄存器内产生一个数字偏移量,这个偏移量累加到程序计数器PC上,程序自动跳转到相应的软件程序处。禁止中断不会影响UCxIV的值。对UCxIV寄存器的任何读或写访问,都会复位挂起优先级最高的中断标志.如果另一个中断标志置位,在响应完之前的中断后,将会立即产生另一个中断。
2.3.4 SPI模式——eUSCI寄存器