TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3220SF SPI函数回调问题

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

赞(0)
未经允许不得转载:TI中文支持网 » CC3220SF SPI函数回调问题
分享到: 更多 (0)