NXP MCU 技术论坛
直播中

刘刚

7年用户 961经验值
私信 关注
[问答]

队列未满时的mimxrt1170-evk fsl_sai_edma QueueFull错误怎么解决?

我已经配置了 USB 音频扬声器。
这是 tx_callback
static 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 试图在繁忙的时隙上请求传输。什么会导致这个?

更多回帖

×
20
完善资料,
赚取积分