目录
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寄存器的任何读或写访问,都会复位挂起优先级最高的中断标志.如果另一个中断标志置位,在响应完之前的中断后,将会立即产生另一个中断。