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.

[参考译文] 8148的音频溢出

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/568743/audio-overrun-with-8148

主题中讨论的其他器件:PCM1808

大家好、

    最近、我遇到了 McASP 音频捕获问题。 看起来,当发生溢出时,McASP 将从 PCM1808捕获一些错误数据。 该数据由 PCM1808生成、McASP 将其添加到其中。 当我浏览 pcm1808数据表时、我发现 pcm1808将"通过停止系统时钟来断电和复位"。

在 funcuin snd_pcm_update_state int 文件 sound/core/pcm_lib.c 中、  

                     如果(AVAIL >=运行时->STOP_THRESHOLD){
                         xrun (子流);
                         return -EPIPE;
                     }

当应用程序线程无法从 McASP 发送或获取音频数据时、内核会将 EPIPE 信号升高到 ALSA 库、这是溢出的。

在这种情况  下、McASP 将被停止、并且 AFR/X 时钟被停止、然后 PCM1808将复位、然后生成脉冲。

如何解决此问题? 如何避免重置 PCM1808,因为我们不想捕获这些错误数据。

感谢大家

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

    您需要解决哪个问题? 这是 DM814x McASP 还是 PCM1808中的问题? 您使用的软件版本是什么?

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    抱歉、我不小心、我的 Linux 内核是 Linux-04.04.00.01。 问题是、即使发生溢出、McASP 也如何持续提供 AFR/X 时钟。 在我看来、PCM1808由于发生溢出时 McASP 停止电源 AFR/X 时钟而被复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    相切、

    您是否使用 Linux-2.6.37-psp04.04.00.01附带的 EZSDK 5.05.02.00?

    让我确认我的理解。 DM814x McASP 为 PCM1808提供 AFR/X 时钟。 PCM1808为 McASP 提供音频数据。 在某些时候、音频溢出发生、McASP 将停止从 PCM1808捕获音频数据、并停止为 PCM1808提供 AFSR/X 时钟。 您不想修复溢出错误、但希望 McASP 为 PCM1808提供 AFSR/X 时钟。 是这样吗?

    此致、

    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    您是否使用 Linux-2.6.37-psp04.04.00.01附带的 EZSDK 5.05.02.00?
    ---- 是的
    是这样吗?
    ---- 是的、正确。
    解决溢出问题更好。 (在我看来、当 CPU 忙时、无法避免溢出、并且无法及时调度捕获/回放线程。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    相切、

    您能否为我提供以下位中的值(从用户空间获取这些值):

    AMUTE[5] ROVRN
    RINTCTL[0] ROVRN

    当发生溢出时、您为什么认为 McASP 停止驱动 AFR/X 时钟? 您是否使用示波器检查 AFR/X 引脚?

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    您能否为我提供以下位中的值(从用户空间获取这些值):

    AMUTE[5] ROVRN --- 0
    RINTCTL[0] ROVRN--- 0

    当发生溢出时、您为什么认为 McASP 停止驱动 AFR/X 时钟? 您是否使用示波器检查 AFR/X 引脚?
    -------- 是的

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

    是否可以在溢出发生之前和之后提供 McASP 寄存器转储? 需要以下寄存器:

    Pdir、PFUNC、PDOUT、PDIN、pdset、 PDCLR、AFESRCTL、AFSXCTL、GBLCTL、RGBLCTL、 XGBLCTL、AMUTE、AFESRCTL、AFSXCTL、RINTCTL、 XINTCTL、RSTAT、XSTAT

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

    您好、Pavel、

      我在函数 Davinci_McASP_TRIGGER 中添加了调试信息、  

      案例 SNDRV_PCM_TRIGGER_STOP:
      案例 SNDRV_PCM_TRIGGER_PAUSE_PUSH:
      if (Substream->stream == SNDRV_PCM_STREAME_CAPTURE_CAPTURE)
      {
        printk ("befor Davinci_McASP_stop \n");
        dump_McASP_regs (dev);
      }
      DaVinci_McBSP_stop (dev、Substream->stream);
      if (Substream->stream == SNDRV_PCM_STREAME_CAPTURE_CAPTURE)
      {
        printk ("在 DaVinci_McASP_stop \n"之后);
        dump_McASP_regs (dev);
      }
      中断;

    当溢出发生时、调试信息如下:

    用于 DaVinci_McASP_STOP
    PFUNC (0xFA038010)=0x00000000
    Pdir (0xFA038014)= 0xFC000010
    PDOUT (0xFA038018)=0x00000000
    PDIN (0xFA03801C)= 0xB0000014
    PDCLR (0xFA038020)= 0x00000000
    AFESRCTL (0xFA03806C)= 0x00000113
    AFSXCTL (0xFA0380AC)= 0x00000113
    GBLCTL (0xFA038044)= 0x00001F1F
    RGBLCTL (0xFA038060)= 0x00001F1F
    XGBLCTL (0xFA0380A0)= 0x00001F1F
    AMUTE (0xFA038048)=0x00000000
    RINTCTL (0xFA03807C)= 0x00000000
    XINTCTL (0xFA0380BC)=0x00000000
    RSTAT (0xFA038080)= 0x0000017D
    XSTAT (0xFA0380C0)=0x00000154

    达芬奇_McBSP_stop 被调用、捕获
    在 DaVinci_McASP_STOP 之后
    PFUNC (0xFA038010)=0x00000000
    Pdir (0xFA038014)= 0xFC000010
    PDOUT (0xFA038018)=0x00000000
    PDIN (0xFA03801C)=0x80000014
    PDCLR (0xFA038020)= 0x00000000
    AFESRCTL (0xFA03806C)= 0x00000113
    AFSXCTL (0xFA0380AC)= 0x00000113
    GBLCTL (0xFA038044)= 0x00001F00
    RGBLCTL (0xFA038060)= 0x00001F00
    XGBLCTL (0xFA0380A0)= 0x00001F00
    AMUTE (0xFA038048)=0x00000000
    RINTCTL (0xFA03807C)= 0x00000000
    XINTCTL (0xFA0380BC)=0x00000000
    RSTAT (0xFA038080)= 0x00000104
    XSTAT (0xFA0380C0)= 0x0000015C

    谢谢

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

    AFESR 信号由 McASP_STOP_Rx (dev)函数停止、它操控寄存器 RGBLCTL。

    此致、
    帕维尔