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 %02xrn",
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_transi
tion_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;
}