This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] [OMAPL138] McASP 多通道错误

Guru**** 2578945 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630784/omapl138-mcasp-multi-channel-error

Thread 中讨论的其他器件:OMAPL138

大家好、

我正在为音频应用开发 OMAPL138、并使用 McASP + EDMA 从2个编解码器(CODEC1和 CODEC2)发送/接收音频数据。

在我的应用中、我始终侦听 CODEC1左通道的数据。 我确保 CODEC1始终将音频数据推送到左声道、将零推送到右声道。 但是、有时(大约5%)我会在 CODEC1的左通道中接收所有零、在右通道中接收音频数据。

我认为有2个可能的原因:

-McASP 出错了。 将左通道与右通道相混淆

-EDMA 错过了 McASP 的1个事件、因此左通道的第一个样本消失了。

是否有人遇到这种情况? 如何解决这个问题?

提前感谢。

田北俊。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我没有看到关于此类问题的报告。

    您能否分享您正在使用的 SDK? 哪些操作系统 RTOS 或 Linux?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我们无法深入了解您如何设置 MCASP 以及如何设置电路板上的音频时钟、则很难对类似的 MCASP 问题进行评论。 我们希望人们提供以下详细信息、以帮助解决音频问题。
    processors.wiki.ti.com/.../Checklist_for_Processor_SDK_RTOS_questions_on_E2E

    您是否尝试检查帧同步、位时钟和数据在正确的时隙发生的范围。 同时确保您具有正确的 AIC 编解码器设置、以便数据显示在正确的插槽上。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan Kovachev 和 Rahul Prabhu,
    感谢您的回复。

    我使用的是 SYS/BIOS 版本6.45和 OMAPL138_Starterware 版本1.10.04.01
    有关我的代码的详细信息:
    *初始化:
    -我用2个串行器设置 McASP,每个串行器有2个通道(左右)
    -帧同步和位时钟由编解码器生成(外部)
    I2S 模式
    -使用 EDMA 传输数据

    *启动时:
    -用于生成时钟的有源编解码器
    -重置 MCBSP_GBLCTL 寄存器
    -按照下面的说明配置 McASP
    -请求 EDMA 通道:
    EDMA3请求通道(SOC_EDMA30CC_0_reg、
    EDMA3_CHANGE_TYPE_DMA、
    EDMA3_CHA_McASP0_TX、
    EDMA3_CHA_McASP0_TX、
    0);
    EDMA3请求通道(SOC_EDMA30CC_0_reg、
    EDMA3_CHANGE_TYPE_DMA、
    EDMA3_CHA_McASP0_RX、
    EDMA3_CHA_McASP0_RX、
    0);
    -初始化 EDMA 参数
    -启动 McASP 时钟:
    McASPRxClkStart (SOC_MCASP_0_CTRL_regs、MCASP_RX_CLK_external);
    McASPTxClkStart (SOC_MCASP_0_CTRL_regs、MCASP_TX_CLK_external);
    -启用传输 EDMA:
    EDMA3 EnableTransfer (SOC_EDMA30CC_0_reg、EDMA3_CHA_McASP0_RX、EDMA3_TRIG_MODE_EVENT);
    EDMA3 EnableTransfer (SOC_EDMA30CC_0_reg、EDMA3_CHA_McASP0_TX、EDMA3_TRIG_MODE_EVENT);
    -激活序列化:
    McASPRxSerActivate (SOC_MCBSP_0_CTRL_regs);
    McASPTxSerActivate (SOC_MCBSP_0_CTRL_regs);
    -检查 XDATA 位并激活状态机:
    while (McASPTxStatusGet (SOC_MCASP_0_CTRL_regs)和 MCASP_TX_STAT_DATAREADY);
    McASPRxEnable (SOC_MCBSP_0_CTRL_regs);
    McASPTxEnable (SOC_MCBSP_0_CTRL_regs);

    *当停止时
    -禁用 EDMA 的传送
    EDMA3DisableTransfer (SOC_EDMA30CC_0_reg、EDMA3_CHA_McASP0_TX、EDMA3_TRIG_MODE_EVENT);
    EDMA3DisableTransfer (SOC_EDMA30CC_0_reg、EDMA3_CHA_McASP0_RX、EDMA3_TRIG_MODE_EVENT);
    -停止 McASP
    HWREG (SOC_MCASP_0_CTRL_regs + MCASP_GBLCTL)= 0;
    McASPRxReset (SOC_MCASP_0_CTRL_regs);
    McASPTxReset (SOC_MCASP_0_CTRL_regs);
    -自由通道 EDMA
    EDMA3自由通道(SOC_EDMA30CC_0_reg、
    EDMA3_CHANGE_TYPE_DMA、
    EDMA3_CHA_McASP0_TX、
    EDMA3_TRIG_MODE_EVENT、
    EDMA3_CHA_McASP0_TX、
    0);
    EDMA3自由通道(SOC_EDMA30CC_0_reg、
    EDMA3_CHANGE_TYPE_DMA、
    EDMA3_CHA_McASP0_RX、
    EDMA3_TRIG_MODE_EVENT、
    EDMA3_CHA_McASP0_RX、
    0);

    我过多地开始和停止传输数据、有时(~5%)我会看到左通道和右通道的数据被交换。 此时、我检查数据网中的信号、并确保数据在正确的时隙中传输。

    谢谢。
    田北俊。