This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432 simplelink SPI_transfer能多次执行吗

用两个launchpad,从机用callback方式,做spi通信测试,一个做主机,一个做从机,主机一次传输10bytes数据,从机一次只传输2bytes数据,能连续执行多次SPI_transfer给主机传输数据吗?

主机代码如下:

void *masterThread(void *arg0)
{
    SPI_Handle masterSpi;
    SPI_Transaction masterTransaction;
    SPI_Params masterSpiParams;
    bool transferOK;
    
    SPI_Params_init(&masterSpiParams);
    /* Initialize SPI handle as default master */
    masterSpi = SPI_open(Board_SPI0, &masterSpiParams);
    if (masterSpi == NULL) {
        //Display_printf(display, 0, 0, "Error initializing SPI\n");
        while (1);
    } else {
        //Display_printf(display, 0, 0, "SPI initialized\n");
    }

    /* Initialize master SPI transaction structure */
    masterTransaction.count = 10;
    masterTransaction.txBuf = (void *)masterTxBuffer;
    masterTransaction.rxBuf = (void *)masterRxBuffer;
    /* Initiate SPI transfer */
    transferOK = SPI_transfer(masterSpi, &masterTransaction);
    UART_writePolling(uart, masterRxBuffer, 10);
    
    /* Deinitialize SPI */
    SPI_close(masterSpi);

    return (NULL);
}

从机代码如下:

void SlaveUserCallbackFxn(void)
{
flags = 1;
}

/* ======== slaveThread ========
* This thread runs on a higher priority, since slave
* has to be ready for master. Slave SPI sends a
* message to master and also receives message from
* master.
*/
void *slaveThread(void *arg0)
{
uint32_t status;
int i;

/* Initialize SPI handle with slave mode */

SPI_Params_init(&slaveSpiParams);
slaveSpiParams.mode = SPI_SLAVE;
slaveSpiParams.transferMode = SPI_MODE_CALLBACK;
slaveSpiParams.transferCallbackFxn = SlaveUserCallbackFxn;
slaveSpi = SPI_open(Board_SPI0, &slaveSpiParams);
if (slaveSpi == NULL) {
while (1); //error
}
i =0;
while (1){
slaveTransaction.count = 2;
slaveTransaction.txBuf = (void *)slaveTxBuffer;
slaveTransaction.rxBuf = (void *)slaveRxBuffer;
flags=0;
transferOK = SPI_transfer(slaveSpi, &slaveTransaction);
while(flags!=1);
}
return (NULL);
}

测试发现,从机并不能多次发送数据,只有第一次SPI_transfer的数据被主机接收到,怎么能多次执行传输数据?