1. 使用的是modus开发环境生成的SPI_master测试代码;
2. SPI接收使用下面的代码:
result = cyhal_spi_transfer(&sSPI, NULL ,NULL , receive_data ,10u , 0xff);
if (CY_RSLT_SUCCESS != result)
{
handle_error();
}
else
{
printf("receive_1 = %02x %02x %02x %02x %02x %02x %02x %02x\r\n",
receive_data[0],receive_data[1],receive_data[2],receive_data[3],
receive_data[4],receive_data[5],receive_data[6],receive_data[7]);
}
cyhal_spi_transfer接收的数据长度如果大于实际传过来的长度时,会卡死,使用调试功能,发现卡死在以下位置:
请问,SPI的接收有什么特殊的设置吗?
cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill)
{
if (NULL == obj)
return CYHAL_SPI_RSLT_BAD_ARGUMENT;
if (_cyhal_scb_pm_transition_pending())
return CYHAL_SYSPM_RSLT_ERR_PM_PENDING;
obj->write_fill = write_fill;
cy_rslt_t rslt = cyhal_spi_transfer_async(obj, tx, tx_length, rx, rx_length);
if (rslt == CY_RSLT_SUCCESS)
{
卡死在这个while里面
while (obj->pending != _CYHAL_SPI_PENDING_NONE) { } /* Wait for async transfer to complete */
}
obj->write_fill = (uint8_t) CY_SCB_SPI_DEFAULT_TX;
return rslt;
}
已解决! 转到解答。
Hi:
你仔细看下这个接口的参数形式,他是在一个接口里面 完成了收发,而且要你指定收发数据的length,也就是你指定每次的数据包长度,从你的描述里面来看,你收到数据包长度低于你指定的,那他就认为数据没收完,当然会一直在这个函数里面判断什么时候收到完整的数据包。
zhichao