while(1){/* Toggle on user LED, indicating a SPI transfer is in progress *///GPIO_toggle(CONFIG_GPIO_LED_1);memset(slaveRxBuffer, 0, sizeof(slaveRxBuffer));transferOK = SPI_transfer(slaveSpi, &transaction);UART_PRINT("transferOK = %d \n\r", (int)transferOK);if (transferOK){Semaphore_pend(semSPIHandle, BIOS_WAIT_FOREVER);UART_PRINT("SPI Continuing \n\r");GPIO_write(CONFIG_SPI_SLAVE_READY, 0);/* Wait until transfer has completed */sem_wait(&slaveSem);UART_PRINT("SPI tx wait done\r\n");GPIO_write(CONFIG_SPI_SLAVE_READY, 1);}else {}delay_1ms(1);}
上面这段代码,在SPI通讯成功若干次之后,会发生transferOK返回true,但是SPI回调函数(里面有一句sem_post(slaveSem))没有调用,从而导致程序卡在了sem_wait(&slaveSem)这里,请问这是为什么?
证实是这个问题,因为串口中SPI continuing的log打印了,但是没有打印spi tx wait done的log
Kevin Qiu1:
sem_wait(&slaveSem)是TI-RTOS中的信号量
Wait until slave is ready for transfer; slave will pull* CONFIG_SPI_SLAVE_READY low.*/sem_wait(&masterSem);
需要与从机连接好才不会卡住
,
user6464274:
连接好了,而且是发送几十次成功之后,突然出现这个问题,测试多次总是这样,在传输几十次成功之后,卡在这里。这是为什么?
,
user6464274:
看上去像是回调函数没有被调用的原因,这是为什么?
,
Kevin Qiu1:
因为从机没有READY信号,阻塞在此处了
建议你看下例程说明dev.ti.com/…/node
TI中文支持网





