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.

[参考译文] TDA4VM:关于 McASP 数据格式。

Guru**** 2568585 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1572385/tda4vm-about-mcasp-data-format

器件型号:TDA4VM
主题中讨论的其他器件:test2.

工具/软件:

您好 TI 专家

SDK 0902

大家好、专家级 TI、我现在有了以下音频设计:

C6X_2 到 Android 使用 TDM32、插槽大小为 32 位:


C6X_2 到 AMP 使用 TDM32、时隙大小为 32 位。

《Q1》:Ω

实际上、从 AMP 传输的时隙大小为 24 位(有效数据为 16 位)。
然而、从我看到的情况来看、我可以使用 int32_t 直接接收音频、并且音频数据不会失真。 (我保存了它以供稍后查看。)

但是、当我将 int32_t 数据从 C6X_2 发送到 Android 时、音频会失真。 此外、当 Android 向 C6X_2 发送音频数据(时隙大小为 24 位、有效数据为 16 位、并且 C6X_2 使用 int32_t 接收音频数据)时、音频也会失真。

除了 MCASP_TXFMCTL.FXWID 字段之外、MCASP 4 和 MCASP 10 的所有 MCASP 配置选项都相同。 (McASP 4 使用一个字;MCASP 10 使用一个位。)

(附件为我的配置文件)。


《Q2》:

mcasp10 的时钟配置:
同步时钟:48kHz
位时钟:32 * 32 * 48kHz = 49152000Hz

我测试了 mcasp4 的两种时钟配置:
同步时钟:48kHz
位 clock_test1:16 * 32 * 48kHz = 24576000Hz
位 clock_test2:32 * 32 * 48kHz = 49152000Hz

哪个位时钟在 mcasp4 中是正确的?


《Q3》:

在 mcasp4 中、我只想使用 32 的槽位大小、那么如何配置位填充和旋转?


此致
Eason


e2e.ti.com/.../2376.test.c








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

    您好: 周怡生

    在 mcasp4 中哪个位时钟是正确的?

    位时钟应为:“时隙数“*“每个时隙的位数“* 48kHz

    在 mcasp4 中、我只想使用 32 位大小的插槽、那么如何配置位填充和旋转?
    [/报价]

    您可以使用 MCASP_RXFMT 和 MCASP_TXFMT 寄存器控制时隙的填充和对齐。

    应使用这些寄存器来确保以正确的格式接收数据。 这些寄存器还控制时隙大小。

    此致、
    Jared

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

    您好 Jared

    非常感谢您的答复!

    位时钟应为:“插槽数“*“每个插槽位数“* 48kHz
    我明白、但我还有一个问题: 

    在此设计下、mcasp4 位时钟应为: 

    16(插槽数)* 32(每插槽位数)* 48kHz = 24576000 Hz、对吗?

    您可以使用 MCASP_RXFMT 和 MCASP_TXFMT 寄存器控制时隙的填充和对齐。


    对于此回答、我仍有一些问题:


    Android 通过 AR2 和 AR3 传输的音频数据为 16 位有符号类型、时隙大小为 32 位。 
    我希望在 C6X_2:中直接接收 int32_t 类型的数据 

    如何设置 MCASP_RXFMT?(
    、例如符号扩展)


    如何设置 MCASP_RXFMT.RROT?

    如何设置 MCASP_RXFMT.RBUSEL?

    如何设置 MCASP_RXFMT.RSSZ? 插槽大小为 32 位? 16 位呢?

    如何设置 MCASP_RXFMT.RPBIT? 0 或 1?

    如何设置 MCASP_RXFMT.RPAD?  

    如何设置 MCASP_RXFMT.RRVRS? MSB 对吗?

    如何设置 MCASP_RXFMT.RDATDLY? 0 位延迟?

      如何设置 MCASP_TXFMT?

     与 MCASP_RXFMT 相同

    此致

    Eason



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

    您好: 周怡生

    16(插槽数)* 32(每插槽位数)* 48kHz = 24576000 Hz、对吗?
    [/报价]

    我知道您现在在问什么。 由于 32 个时隙在两个串行器之间分配、因此应该正确。

    [报价 userid=“555442" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1572385/tda4vm-about-mcasp-data-format/6056072

    如何设置 MCASP_RXFMT.RROT?

    如何设置 MCASP_RXFMT.RBUSEL?

    如何设置 MCASP_RXFMT.RSSZ? 插槽大小为 32 位? 16 位呢?

    如何设置 MCASP_RXFMT.RPBIT? 0 或 1?

    如何设置 MCASP_RXFMT.RPAD?  

    如何设置 MCASP_RXFMT.RRVRS? MSB 对吗?

    如何设置 MCASP_RXFMT.RDATDLY? 0 位延迟?

      如何设置 MCASP_TXFMT?

     与 MCASP_RXFMT 相同

    [/报价]

    在 PDK 中、可以在 Mcasp_Hw SetupData 结构的 fmt 字段中设置这些值。 例如、在 McASP_cfg.c 中设置了以下代码:

        /* .rfmt     = */ 0x000180F2, /* 0/1 bit delay from framsync
                                       * MSB first
                                       * No extra bit padding
                                       * Padding bit (ignore)
                                       * slot Size is 32
                                       * Reads from DMA port
                                       * NO rotation
                                       */

    所有这些值都取决于您如何设置系统。

    我希望在 C6X_2:中直接接收 int32_t 类型的数据
    [/报价]

    完成所有操作后、该值将存储在一个 32 位字中(在内核上)。

    此致、
    Jared

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

    您好 Jared

    感谢您的帮助、我会尝试一下。

    此致
    Eason

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

    您好: 周怡生

    测试后、请告诉我您的结果。

    此致、
    Jared