我已经配置了 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;
}![](https://file.elecfans.com/web2/M00/A7/01/poYBAGRsEyaAFNrGAAATwzOg6v0818.png)
![](https://file.elecfans.com/web2/M00/A7/7D/pYYBAGRsEyqALhJnAABlNDGG5zU296.png)
![](https://file.elecfans.com/web2/M00/A7/01/poYBAGRsEy2AfD9XAABmlqdxyVw258.png)
所以有一个 4 元素的队列。有 2 个可用时隙,SAI 试图在繁忙的时隙上请求传输。什么会导致这个?