您好、TI 团队、
我正在使用 SPI 协议 、其中包括将 imx8作为主设备、将 msp430fr5992作为从设备。
MSP430FR5992将接收一个数据包、进行一些处理、并将处理后的数据发送回 IMX。
我们能够从 imx8接收32字节(数据包)并也对数据进行处理。 但我们无法一次传输32个字节。
以下是 SPI 配置:
void spi_slave_init ()
{
//配置 GPIO:SEL0+SEL1
P1SEL1 |=(BIT6);//USCI_B0 MOSI
P2SEL1 |=(BIT2);//USCI_B0 CLK
P1SEL1 |=(BIT7);//USCI_B0 MISO 引脚
P1SEL1 |=(BIT3);//芯片选择引脚
P1SEL0 &=~(BIT6);//USCI_B0 MOSI
P2SEL0 &=~(BIT2);//USCI_B0 CLK
P1SEL0 &=~(BIT7);//USCI_B0 MISO 引脚
P1SEL0 &= 8 μ~(BIT3);//芯片选择引脚
PJSEL0 |= BIT4 | BIT5;
//配置 USCI_B0以进行 SPI 操作
UCB0CTLW0 = UCSWRST;//**将状态机置于复位状态**
// 4引脚8位 SPI 从属设备
UCB0CTLW0 |= UCSYNC | UCCKPL | UCMSB | UCMODE_2;//时钟极性高,msb
UCB0CTLW0 &=~μ A UCCKPH;//时钟相位=低电平
UCB0CTLW0 |= UCSSEL_0;//UCLK 用于从机模式
UCB0CTLW0 &&~UCSWRST;//**初始化 USCI 状态机**
UCB0IE |= UCRXIE;//启用 USCI_B1 RX 中断
}
这是我们接收数据包的方式:
for (index_spi=0;index_spi {
while (!(UCB0IFG 和 UCRXIFG)){};
SPIRxData[INDEX_SPI]= UCB0RXBUF;//将从接收缓冲区接收的数据存储到一个数组中
UCB0IFG &=~UCRXIFG;
}
这是传输经过处理的数据的方式:
for (INDEX_TX=0;INDEX_TX< TxLength;INDEX_TX++)//根据 Txlength 确定要传输的字节数
{
while (!(UCB0IFG & UCTXIFG)){};
UCB0TXBUF = SPI_TXData[INDEX_TX];//将数据发送到 IMX
}
在该传输函数中、我们只能传输一个字节。 我们无法发送整个数据包。 我们能够在收到下一个数据包时发送整个数据包。
如果有任何解决方案、您需要同时传输整个数据包、请告诉我。
此致
阿比塞克