Tool/software: TI-RTOS
hi guy
I use the Ginkgo tool as a slave module, I use EXP_MSP430F5529LP as a master module, and when slave module sends data to master(e.g "ABCD12"), but after master receives accomplishit, I call the SPI_transfer() function again to receive data. but when slave doesn't send data, why does master still receive data? And the same last received data(e.g "222222") , I don't know why.
code is as follows
Void spiB1_master_taskFxn(UArg arg0, UArg arg1)
{
/* Create I2C for usage */
SPI_Params_init(&spiB1_master_Params);
spiB1_master_Params.transferMode = SPI_MODE_BLOCKING;
//spiB1_master_Params.transferCallbackFxn = spiB1_transferCallbackFxn;
spiB1_master_Params.mode = SPI_MASTER;
spiB1_master_Params.dataSize = 8;
//spiB1_master_Params.frameFormat = SPI_POL1_PHA0;
spiB1_master = SPI_open(Board_SPIB1_MASTER, &spiB1_master_Params);
if (spiB1_master == NULL) {
System_abort("Error Initializing SPI B1\n");
}
else {
System_printf("SPI B1 Initialized!\n");
}
System_flush();
//gatemute
GateMutex_Handle gatemutex2_handle;
GateMutex_Params gatemutex2_params;
GateMutex_Params_init(&gatemutex2_params);
gatemutex2_handle = GateMutex_create(&gatemutex2_params, NULL);
if (gatemutex2_handle == NULL) {
System_abort("Error GateMutex2_create\n");
}
else {
System_printf("GateMutex2_create OK!\n");
}
SPI_Transaction spiTransaction;
IArg key;
while(1){
//
key = GateMutex_enter(gatemutex2_handle);
//cs low
Board_SPIB1_MASTER_CS_LOW;
char rxbuf[7];
spiTransaction.txBuf = NULL;
spiTransaction.rxBuf = rxbuf;
spiTransaction.count = 6;
if (SPI_transfer(spiB1_master, &spiTransaction) == NULL) {
System_printf("SPI Bus fault\n");
System_flush();
}
//cs hight
Board_SPIB1_MASTER_CS_HIGH;
rxbuf[6] = 0;
printf("TASK spiB1_master receive DATA:%s\r\n",rxbuf);
//
GateMutex_leave(gatemutex2_handle, key);
Task_sleep(1000);
GPIO_toggle(Board_LED_P4_7);;
}
}
int main(void)
{
/* Call board init functions */
Board_initGeneral();
Board_initGPIO();
Board_initUART();
Board_initI2C();
Board_initSPI();
//spiB1 master
taskParams.arg0 = 1000;
taskParams.stackSize = TASKSTACKSIZE;
taskParams.stack = &spiB1_master_taskStack;
Task_construct(&spiB1_master_taskStruct, (Task_FuncPtr)spiB1_master_taskFxn, &taskParams, NULL);
/* Start BIOS */
BIOS_start();
return (0);
}
Best regards
xc.mo
