Hi
I want to build a SPI sample based on uartEach sample that two CC1310 devices talk each other.
My code is below. Open the SPI with Master/Slave mode according to UART input. I don't know why every SPI_transfer will return FALSE, and the second SPI_transfer will not block for recieving.
#define SPI_TRANSFER_SLAVE_STRING "hello, SPI Slave..."
#define SPI_TRANSFER_MASTER_STRING "hello, SPI Master..."
Void echoFxn(UArg arg0, UArg arg1)
{
uint8_t isTx;
char input, output;
UART_Handle uart;
UART_Params uartParams;
SPI_Handle spi;
SPI_Params spiParams;
SPI_Transaction spTrans;
char buffer[128] = "\fSPI Sample:\r\n";
/* Create a UART with data processing off. */
UART_Params_init(&uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudRate = 9600;
uart = UART_open(Board_UART0, &uartParams);
SPI_Params_init(&spiParams);
spiParams.bitRate = 1000000; /*!< SPI bit rate in Hz */
spiParams.frameFormat = SPI_POL1_PHA1;
if (uart == NULL) {
System_abort("Error opening the UART");
}
UART_write(uart, buffer, strlen(buffer));
UART_read(uart, &input, 1);
memset(&spTrans, 0, sizeof(SPI_Transaction));
if ('1' == input) {
spiParams.mode = SPI_MASTER; /*!< Master or Slave mode */
strcpy(buffer, "SPI open with Master mode");
isTx = FALSE;
} else {
spiParams.mode = SPI_SLAVE; /*!< Master or Slave mode */
isTx = TRUE;
strcpy(buffer, "SPI open with Slave mode");
}
UART_write(uart, buffer, strlen(buffer));
spi = SPI_open(Board_SPI0, &spiParams);
if (spi == NULL) {
System_abort("Error opening the UART");
}
/* Loop forever echoing */
while (1) {
if (SPI_MASTER == spiParams.mode) {
spTrans.count = strlen (SPI_TRANSFER_SLAVE_STRING);
spTrans.txBuf = SPI_TRANSFER_SLAVE_STRING;
spTrans.rxBuf = NULL;
SPI_transfer(spi, &spTrans);
} else {
spTrans.count = strlen (SPI_TRANSFER_SLAVE_STRING);
spTrans.txBuf = NULL;
spTrans.rxBuf = buffer;
SPI_transfer(spi, &spTrans);
}
}
}