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.

[参考译文] RTOS/AM5728:MCASP3 RX 溢出和同步错误

Guru**** 2541300 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/785806/rtos-am5728-mcasp3-rx-overrun-and-sync-errors

器件型号:AM5728

工具/软件:TI-RTOS

您好!

在我的器件上、在 DSP1内核中、我尝试在32位、8槽 TDM、位时钟24.576MHz/96KHz 帧同步的同步模式下设置 MCASP3 RX 和 TX (内部)。 DSP1内核(MCASP3)设置为另一个外部器件的时钟主控。  

  1. 当我仅为 MCASP3配置 TX 时、我会看到来自 MCASP3_AXR0的音频数据符合预期、没有错误。
  2. 当我启用 RX 时、我会看到溢出错误和意外的帧同步错误。  
    1. mcaspBindDev 和 mcaspCreateChan 不返回任何错误。
驱动程序在启动 RX 和 TX 缓冲区后、永远不会调用传递给 MCASP3 RX 的 mcaspCreateChan 的回调。
  1. 但是、我确实看到 TX 发生了回调
  • 我已验证引脚复用/焊盘 IO 设置
  • 缓冲区在 L2SRAM 上分配
  • 我知道勘误表 i868、并尝试 了 hwFifoEventDMARatio 的不同值

MCASP3设置配置如下-  

{/* MCASP3_TX */
0xFFFFFFFF、// MCASP_TXMASK
0x000080F0、// MCASP_TXFMT //插槽大小= 32位,无位延迟
0x00000413、// MCASP_TXFMCTL
0x000000FF、// MCASP_TXTDM
0x0000000F、// MCASP_EVTLX
0x000001ff、// MCASP_TXSTAT
0x00000000、// MCASP_XEVTCTL
  {
     0x00000020、// MCASP_ACLKXCTL // CLKDIV = 1
     0x0000800F、// MCASP_AHCLKXCTL // HDIV = 16
     0x00000000 // MCASP_TXCLKCHK
   }
}、
{/* MCASP3_RX */
0xFFFFFFFF、// MCASP_RXMASK
0x000080F0、// MCASP_RXFMT //插槽大小= 32位,无位延迟
0x00000413、// MCASP_RXFMCTL
0x000000FF、// MCASP_RXTDM
0x0000000B、// MCASP_EVTCLR
0x000001ff、// MCASP_RXSTAT
0x00000000、// MCASP_REVTCTL
  {
     0x00000020、// MCASP_ACLKRCTL // CLKDIV = 1
     0x0000800F、// MCASP_AHCLKRCTL // HDIV = 16
     0x00000000 // MCASP_RXCLKCHK
   }
}、

这是使用"omapconf dump mcasp3"的所有状态寄存器的转储

|--------------------------------------- |
|注册 姓名|注册 地址|寄存器 值 |
|--------------------------------------- |
| MCBSP_PID | 0x48468000 | 0x44307B03 |
| PWRIDLESYSCZI| 0x48468004 | 0x00000001 |
| MCBSP_PFUNC | 0x48468010 | 0x00000000 |
| MCBSP_Pdir | 0x48468014 | 0xFC000001 |
| MCBSP_PDOUT | 0x48468018 | 0x00000000 |
| MCBSP_PDIN | 0x4846801C | 0x08000000 |
| MCBSP_PDCLR | 0x48468020 | 0x00000000 |
| MCBSP_GBLCTL | 0x48468044 | 0x0000031F |
| MCASP_AMUTE | 0x48468048 | 0x00000000 |
| MCASP_LBCTL | 0x4846804C | 0x00000000 |
| MCASP_TXDITCTL | 0x48468050 | 0x00000000 |
| MCBSP_GBLCTLR | 0x48468060 | 0x0000031F |
| MCASP_RXMASK | 0x48468064 | 0xFFFFFFFF |
| MCASP_RXFMT | 0x48468068 | 0x000080F0 |
| MCASP_RXFMCTL | 0x4846806C | 0x00000413 |
| MCASP_ACLKRCTL | 0x48468070 | 0x00000020 |
| MCASP_AHCLKRCTL | 0x48468074 | 0x0000800F |
| MCASP_RXTDM | 0x48468078 | 0x000000FF |
| MCASP_EVTCTLR | 0x4846807C | 0x0000000B |
| MCASP_RXSTAT | 0x484680| 0x00000177 |
| MCASP_RXTDMSLOT | 0x48468084 | 0x00000000 |
| MCASP_RXCLKCHK | 0x48468088 | 0x00000000 |
| MCASP_REVTCTL | 0x4846808C | 0x00000000 |
| MCBSP_GBLCTLX | 0x484680A0 | 0x0000031F |
| MCASP_TXMASK | 0x484680A4 | 0xFFFFFFFF |
| MCASP_TXFMT | 0x484680A8 | 0x000080F0 |
| MCASP_TXFMCTL | 0x484680AC | 0x00000413 |
| MCASP_ACLKXCTL | 0x484680B0 | 0x00000020 |
| MCASP_AHCLKXCTL | 0x484680B4 | 0x0000800F |
| MCASP_TXTDM | 0x484680B8 | 0x000000FF |
| MCASP_EVTCTLX | 0x484680BC | 0x0000000F |
| MCASP_TXSTAT | 0x484680C0 | 0x00000008 |
| MCASP_TXTDMSLOT | 0x484680C4 | 0x0000017F |
| MCASP_TXCLKCHK | 0x484680C8 | 0x56595300 |
| MCASP_XEVTCTL | 0x484680CC | 0x00000000 |
| MCASP_CLKADJEN | 0x484680D0 | 0x00000000 |
| MCBSP_XRSRCTL0 | 0x48468180 | 0x00000011 |
| MCBSP_XRSRCTL1 | 0x48468184 | 0x00000022 |
| MCASP_XRSRCTL2 | 0x48468188 | 0x00000000 |
| MCASP_XRSRCTL3 | 0x4846818C | 0x00000000 |
| MCBSP_WFIFOCTL | 0x48469000 | 0x00000401 |
| MCASP_WFIFOSTS | 0x48469004 | 0x00000000 |
| MCBSP_RFIFOCTL | 0x484698008| 0x00010401 |
| MCASP_RFIFOSTS | 0x4846900C | 0x00000040 |
|--------------------------------------- |

和、omapconf show mcasp3 -  

|--------------------------------------- |
|数据端口和缓冲器|
|--------------------------------------- |
|端口|数据总线|
|发送 DMA ||
| DMA 请求|启用|
|状态|无错误|
|接收 DMA ||
| DMA 请求|启用|
|状态|无错误|
|发送缓冲器(XBUF)||
|状态|无错误|
|接收缓冲器(RBUF)||
|状态|溢出发生|
|写入 FIFO (WFIFO)||
|状态|禁用|
|阈值| 4个样本|
|级别| FIFO 中的0个样本|
|读取 FIFO (RFIFO)||
|状态|启用|
|阈值| 4个样本|
|级别| 64个 FIFO 样本|
|--------------------------------------- |

|----------------------------------------- |
|控制|
|----------------------------------------- |
|发送状态机||
|状态|保持在复位状态|
|发送序列发生器||
|启用的插槽| 8 |
|有源插槽| 8 |
|活动插槽掩码| 0x000000FF |
|当前时隙|非活动|
|接收状态机||
|状态|活动|
|接收序列发生器||
|启用的插槽| 8 |
|有源插槽| 8 |
|活动插槽掩码| 0x000000FF |
|当前时隙| 0 |
|----------------------------------------- |

|------------------------------------------------ |
|时钟|
|------------------------------------------------ |
|发送位时钟||
|状态|运行|
|除法器|除以1 |
|来源|内部|
|极性|在上升沿驱动|
|发送高速时钟||
|状态|运行|
|除法器| 16分频|
|源|内部(AUXCLK)|
|极性|非反相|
|接收位时钟||
|状态|运行|
|除法器|除以1 |
|来源|内部|
|极性|下降沿上的样本|
|同步模式|同步到 TX |
|空闲模式|非空闲|
|------------------------------------------------ |

|---------------------------------------------- |
|帧同步发生器|
|---------------------------------------------- |
|发送帧同步||
|发生器状态|保持在复位状态|
|来源|内部|
|极性|帧从下降沿开始|
|脉宽|单个字|
|插槽数| 8 (TDM)|
|数据延迟| 0位|
|状态|无错误|
|接收帧同步||
|发生器状态|激活|
|来源|内部|
|极性|帧从下降沿开始|
|脉宽|单个字|
|插槽数| 8 (TDM)|
|数据延迟| 0位|
|状态|意外帧同步|
|同步模式|同步到 TX |
|---------------------------------------------- |

|----------------------------------------- |
|格式单位|
|----------------------------------------- |
|发送格式单元||
|插槽大小| 32位|
|位掩码| 0xFFFFFFFF |
|填充|带0的焊盘|
|右旋转| 0位位置|
|比特流顺序| MSB 优先|
|接收格式单元||
|插槽大小| 32位|
|位掩码| 0xFFFFFFFF |
|填充|带0的焊盘|
|右旋转| 0位位置|
|比特流顺序| MSB 优先|
|----------------------------------------- |

|------------------------------- |
|串行器|
|------------------------------- |
|发送串行器|清除|
|接收串行器|活动|
|串行器0 ||
|模式|发送|
|非活动状态| Hi-Z |
|串行器1 ||
|模式|接收|
|非活动状态| Hi-Z |
|串行器2 ||
|模式|非活动|
|非活动状态| Hi-Z |
|串行器3 ||
|模式|非活动|
|非活动状态| Hi-Z |
|------------------------------- |

|--------------------------------------- |
|引脚控制|
|--------------------------------------- |
| AFESR |||
|功能|接收帧同步|
|方向|输出|
| ACLKR ||
|功能|接收位时钟|
|方向|输出|
| AFSX ||
|功能|传输帧同步|
|方向|输出|
| ACLKX ||
|功能|发送位时钟|
|方向|输出|
| AHCLKX ||
|功能|发送高频率时钟|
|方向|输出|
| AXR0 ||
|功能| TX/RX 数据通道0 |
|方向|输出|
| AXR1 ||
|功能| TX/RX 数据通道1 |
|方向|输入|
| AXR2 ||
|功能| TX/RX 数据通道2 |
|方向|输入|
| AXR3 ||
|功能| TX/RX 数据通道3 |
|方向|输入|
|--------------------------------------- |

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


    {/* MCASP3_TX */
    1、
    { McASP_SerializerNum_0},
    &McASP_setup[MCASP3_TX]、
    对、
    McASP_OpMode_TDM、
    McASP_WordLength _32、
    null、
    0、
    null、
    (McASP_GblCallback) M3_GblErrXmt、
    8、
    McASP_BufferFormat_1SER_MULTISLOT_Interleaved、
    对、
    4、
    对、
    McASP_WordBitsSelect_MSB
    }、
    {/* MCASP3_RX */
    1、
    { McASP_SerializerNum_1 },
    &McASP_setup[MCASP3_RX]、
    对、
    McASP_OpMode_TDM、
    McASP_WordLength _32、
    null、
    0、
    null、
    (McASP_GblCallback) M3_GblErrRcv、
    8、
    McASP_BufferFormat_1SER_MULTISLOT_Interleaved、
    对、
    4、
    对、
    McASP_WordBitsSelect_MSB
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jimit、

    您是否使用 AM57x PSDK RTOS v5.02?

    您是否使用 AM572x TI 电路板(EVM、IDK)或定制电路板?

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

    我在定制板上使用 AM57x PSDK RTOS v5.02、在 DSP 和 M4内核上使用 TI-RTOS、在 A15内核上使用 Linux。

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

    因此、当开始在 AM572x McASP AXR 输入引脚上捕获音频数据时、存在溢出情况、这是正确的吗?

    当 DMA/CPU (DSP1)接收数据时,必须在每个时隙内从配置为活动(在 MCASP_RXTDM 中选择活动时隙)和接收(在 MCASP_XRSRCTLn 中启用 Rx)的每个串行器读取数据。 否则会导致缓冲区溢出。 有关详细信息、请参阅 AM572x TRM 部分"24.6.4.15.2缓冲区溢出错误-接收器"和"24.6.4.15.4数据端口错误-接收器"

    另请检查您是否与勘误表"i933与 L4_PER2上的其他外设同时访问 IODELAY 可能挂起"一致

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

    您好、Pavel、

    我只有一个 RX 串行器。 当我使用 mcaspSubmitChan()将 Rx 缓冲区提交到 MCASP 驱动程序时,我会看到溢出和意外的帧同步错误。 在提交 RX 缓冲区后,不会调用在 mcaspCreateChan()中注册的 MCASP_TiomCallback 函数。 我希望回调函数能够通知应用程序数据已接收、但并未发生这种情况。 (我有 MCASP4和5正常工作。)

    至于在每个时隙内从串行器接收数据端口的样本并将其放入提交的缓冲区、是否不属于 MCASP 驱动程序/PDK 库?

    此致、

    Jimit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已验证在设置 MCASP 总线之前是否完成了对 IODELAY 的所有访问。 我仍然看到相同的错误。

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

    您是否还可以对 McASP3 pinmux 寄存器进行寄存器转储并为我提供这些值? 您的引脚多路复用设置可能有问题。 请注意、pinmux 应在内部片上 RAM 存储器中完成。

    关于 mcaspSubmitChan()和 mcaspCreateChan()功能,您可以从以下文档中获得更多信息:

    pdk_am57xx_1_0_13/packages/ti/drv/McASP/docs/MCASP_LLD_SDS.pdf

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

    您好、Pavel、

    这就是我对 MCASP3引脚的设置-  

    寄存器名称 地址
    CTRL_CORE_PAD_MCASP3_ACLKX 0x4A003724 0x00010000
    CTRL_CORE_PAD_MCASP3_FSX 0x4A003728 0x00010000
    CTRL_CORE_PAD_MCASP3_AXR0 0x4A00372C 0x00010000
    CTRL_CORE_PAD_MCASP3_AXR1 0x4A003730 0x00050000

    此致、

    Jimit

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

    mcasp3_aclkx 仅设置为输出。 您能否将其更改为输入/输出(Rx 启用)并检查这是否会带来任何改进。 有关更多详细信息、请参阅 AM572x TRM 第24.6.2.1节 McASP 信号。

    注意:为了使 mcaspx_aclkx、mcaspx_ahclkx 和 mcaspx_aclkr 信号正常工作、相应 CTRL_core_pad_x 寄存器的 INPUTENABLE 位应出于重定时的目的设置为0x1。

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

    我尝试更改 MCASP3_ACLKX 的引脚多路复用器以在 u-boot 中启用输入、但仍然看到相同的问题。

    uboot 中的 Pinmux -
    {MCASP3_ACLKX、(M0 | PIN_INPUT)}、/* mcasp3_aclkx.mcasp3_aclkx *
    {MCASP3_FSX、(M0 | PIN_OUTPUT)}、/* mcasp3_FSX.mcasp3_FSX *
    {MCASP3_AXR0、(M0 | PIN_OUTPUT)}、/* mcasp3_axr0.mcasp3_axr0 */
    {MCASP3_AXR1、(M0 | PIN_INPUT)}、/* mcasp3_axr1.mcasp3_axr1 */

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

    您要在哪个文件中生成该 pinmux? 有关 AM57x RTOS 引脚多路复用的更多信息、请参阅以下指针:

    www.ti.com/.../sprac44a.pdf
    software-dl.ti.com/.../index_board.html

    另请注意、我们提供了 McASP 示例、您可以参阅- MCASP_Audio_evmAM572x_c66ExampleProject。 此示例首先从从 AIC3104编解码器的 mcasp3_axr1引脚上接收音频、然后将该音频从 AM572x McASP3传输到 AM572x DSP 内核。 AIC3104编解码器从 PC 线路输出获取音频数据。

    您可以探索以下领域以供参考:

    pdk_am57xx_1_0_13/packages/ti/drv/McASP/example/evmAM572x/src/audio_evmInit.c
    pdk_am57xx_1_0_13/packages/ti/drv/McASP/example/evmAM572x/src/McASP_cfg.c

    pdk_am57xx_1_0_13/packages/ti/drv/McASP/example/src/audioSample_main.c
    pdk_am57xx_1_0_13/packages/ti/drv/McASP/example/src/audioSample_io.c

    pdk_am57xx_1_0_13/packages/ti/drv/McASP/SoC/am572x/McASP_SoC.c

    有关此 McASP 示例的更多信息、请参阅以下用户指南:

    software-dl.ti.com/.../index_device_drv.html

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

    Pavel、

    我在 uboot 的 mux_data.h 中生成 pinmux 我可以使用 omapconf 工具验证是否已在用户空间的 uboot 中正确设置 pinmux。

    我已使用 EVM 的 MCASP_Audio_evmAM572x_C66示例项目作为为定制板实现 MCASP3/4/5的参考。 请注意、MCASP4和5正常工作、MCASP3的 TX 也是如此;它的 RX 会导致问题。  

    此致、

    Jimit

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

    是否对所有 McASP (McASP3/4/5)使用96KHz FS 和24.576MHz 位时钟? 您能否仔细检查是否正确计算位时钟、请参阅以下用户指南以了解如何计算位时钟的详细信息:

    www.ti.com/.../sprac09a.pdf

    以下文档描述了 RX 溢出的最常见原因、请查看:

    www.ti.com/.../sprac10.pdf、4个上溢和下溢(XRUN)

    是否在启用 McASP RX 部件或 McASP 正常开始接收后立即出现此溢出错误、并且溢出在稍后阶段发生?

    RX 溢出也可能是由于系统不满足实时要求、请检查以下文档是否有助于配置带宽:

    www.ti.com/lit/an/sprac46a/sprac46a.pdf

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

    我还发现了 McASP3和 McASP4之间的一个区别。 McASP3_DAT 端口(0x46000000)连接到 L3_MAIN 互连、而 MCASP4_DAT (0x48436000)连接到 L4_PER2互连。 AM572x TRM 中还有以下注意事项:

    24.6.4.10.1.3通过数据端口(数据)传输

    注意:McASP1、McASP2和 McASP3的数据端口可通过 L3_main 直接访问、不支持 FIFO/常量寻址模式。 必须改为使用递增传输。

    在典型的 McASP 传输情形中、DMA 控制器通过 McASP1/2/3的 L3_main Interconnect 上的 McASP 数据端口(数据)和 McASP4/5/6/7/8的 L4_PER2 Interconnect 上的 McABUFn 传输缓冲区进行写入访问。


    您可以检查您的软件是否符合此 TRM 要求。

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

    您好、Pavel、

    1. 我已经验证了用于 MCASP3 TX 的96KHz FSX 和24.576MHz ACLKX。 由于 RX 被配置为与 TX 同步(即 MCASP_ACLKXCTL[6]异步= 0)、 因此 MCASP_ACLKRCTL 的分频器无效并使用 TX 的 FS 和位时钟。
    2. 对于 MCASP4/5,FS 为16KHz,位时钟为512KHz (I2S 模式,内部时钟,异步= 0)
    3. 我在启用 McASP Rx 部分并对缓冲区进行初始化后立即观察溢出
    4. 为了满足实时要求、我在 L2SRAM 上分配了发送和接收缓冲区。
    5. 如果我禁用 RX、并且仅运行 TX、我从不会看到欠运转
    6. 我在 McASP1/2/3数据端口的自定义资源表中添加了 devmem 条目。 我只读一下 TRM 的第24.6.4.10.1.3节。
      1. 如何在 TI-RTOS 中使用 EDMA LLD 设置递增传输模式?

    此致、

    Jimit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通过将 MCASP3的 Rx 和 TX EDMA 硬件事件编号更改为 CSL_EDMA3_CHA_MCASP5_RX 和 CSL_EDMA3_CHA_MCASP5_TX、而不是 CSL_EDMA3_CHA_MCASP2_R/CSL_EDMA3_CHA_MCASP2_TX、我能够解决此问题。 对于 MCASP3 RX、似乎还有其他一些可能使用 EDMA 默认硬件事件。 在我的应用程序中、MCASP6未使用、因此我最终使用了它的 EDMA 硬件事件编号。 我还尝试了 MCASP2、这也需要重新映射到未使用的 MCASP 总线。

    我必须更改 McASP_SoC.c 以及应用程序中的内容。

    CSL_xbarDmaConfigure (CSL_XBAR_DMA_CPU_ID_EDMA、132、1+CSL_EDMA3_CHA_MCASP5_RX);
    CSL_xbarDmaConfigure (CSL_XBAR_DMA_CPU_ID_EDMA、133、1+CSL_EDMA3_CHA_MCASP5_TX);

    此致、
    Jimit