用两个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的数据被主机接收到,怎么能多次执行传输数据?