我已经配置了 USB 音频扬声器。
这是 tx_callback
sta
tic void tx_callback(I2S_Type *base, sai_edma_handle_t *handle, status_t status, void *userData)
{
global_var_struct_t *global_var_struct_ptr;
global_var_struct_ptr = &global_var_struct;
if (kStatus_SAI_RxError == status)
{
}
else
{
global_var_struct_ptr->free_sai_tx_queue = SAI_TransferGetValidTransferSlotsEDMA(base, handle);
}
}
在 USB Audio Thread 中,我请求发送一组新的声音数据
如果 (global_var_ptr->free_sai_tx_queue != 0){
随机几分钟后(可以是 10 或 30)音频停止播放。USB 看起来一直在工作。但是当我连接到调试时,我看到了这个:
if (handle->saiQueue[handle->queueUser].data != NULL)
{
if (SAI_TransferGetValidTransferSlotsEDMA(base, handle) != 0)
{
return kStatus_SAI_TxError;
}
return kStatus_SAI_QueueFull;
}
所以有一个 4 元素的队列。有 2 个可用时隙,SAI 试图在繁忙的时隙上请求传输。什么会导致这个?