串行通信:SPI与I2C总线详解
1. SPI主设备接收数据
当SPI被配置为主设备并通过SOMI接收数据时,主设备仍需产生SCLK脉冲,以将数据从从设备移出并移入主设备。数据通过接收移位寄存器(Rx shift register)接收,当所有位都被移入后,整字节数据会被转移到RX缓冲区(UCAxRXBUF)。接收系统会跟踪传入的数据,当新数据到达缓冲区时,会在UCAxIFG寄存器中设置RXIFG标志。通过启用UCAxIE寄存器中的RXIE位,RXIFG可以触发中断。
主设备产生SCLK,因此必须向从设备发送必要的时钟脉冲,使从设备将数据移出并返回主设备的Rx移位寄存器。这可以通过向主设备的Tx寄存器写入任意值的虚拟字节来实现,从而迫使系统生成8个SCLK脉冲。
下面通过一个示例来说明主设备如何接收数据。由于仅使用MSP430FR2355 LaunchPad™板进行此示例,我们只需将eUSCI_A0的SIMO引脚连接到eUSCI_A0的SOMI引脚。这样可以在SIMO上发送一个字节的数据,并在8个时钟周期后观察其到达Rx缓冲区。此示例虽有些简单,但它展示了主设备如何通过写入Tx缓冲区请求从设备的数据,然后等待RXIFG中断以指示Rx缓冲区中有可用数据。
在这个设计中,使用按钮开关S1和S2从Tx向Rx发送不同字节的数据(0x10和0x66)。当Rx接收到0x10时,会切换LED1;当接收到0x66时,会切换LED2。
SPI主设备接收数据步骤如下:
1. 主设备产生SCLK脉冲。
2. 向主设备Tx寄存器写入虚拟字节,生成8个SCLK脉冲。
3. 等待数据通过SOMI移入主设备Rx移位寄存器。
4.