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.

[参考译文] SK-AM62:更改 McASP0 发送高时钟父级时 McASP1 和 McASP2 中出现意外错误

Guru**** 2429850 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1545972/sk-am62-unexpected-errors-in-mcasp1-and-mcasp2-when-changing-mcasp0-transmit-high-clock-parent

器件型号:SK-AM62


工具/软件:

您好团队:

更改 McASP0 的发送高时钟父级意外导致 McASP1 和 McASP2 中出现错误、此错误本应不受影响。

当 McASP0 的发送高时钟父级设置为 AUDIO_EXT_REFCLK0 时、McASP1 和 McASP2 的所有操作(提交 Tx、提交 Rx、startTx、startRx)都返回成功。
※工程名称:MCASP0-2_AUDIO_EXT_REFCLK0

playback wakeup!!
MCASP_submitTx 0 0 0 0 0 0
MCASP_submitRx 0 0 0 0 0 0
MCASP_start
MCASP start status -3
-1 -2 0 0 0 0

但是、将 McASP0 的发送高时钟父级更改为 AUDIO_EXT_REFCLK1 后、McASP1 和 McASP2 的所有操作 (submitTx、submitRx、startTx、startRx) 都返回错误。
※工程名称:MCASP0_AUDIO_EXT_REFCLK1_MCASP1-2_AUDIO_EXT_REFCLK0

ERROR: Drivers_mcaspOpen:296: MCASP open failed for instance 0 !!!
playback wakeup!!
MCASP_submitTx -1 -1 -1 -1 -1 -1
MCASP_submitRx -1 -1 -1 -1 -1 -1
MCASP_start
MCASP start status -6
-1 -1 -1 -1 -1 -1

当 McASP0 的发送高时钟父级设置为 AUDIO_EXT_REFCLK1 且 McASP1 和 McASP2 设置为使用 AUDIO_EXT_REFCLK0 时、如何使 McASP1 和 McASP2 的所有操作 (submitTx、submitRx、startTx、startRx) 返回成功?

我想对 McASP0 和 McASP1/McASP2 使用不同的时钟源、因此我不想将它们统一在单个时钟源下。

顺便说一下、当 AUDIO_EXT_REFCLK1 的时钟电源可用时、两个工程中的所有 McASP 实例都会返回所有操作 (submitTx、submitRx、startTx、startRx) 成功。

playback wakeup!!
MCASP_submitTx 0 0 0 0 0 0
MCASP_submitRx 0 0 0 0 0 0
MCASP_start
MCASP start status 0
0 0 0 0 0 0

使用的 SDK:
mcu_plus_sdk_am62x_10_01_00_33

(38c0b99e-9d94-47c7-8fc8-14d80afdd29f)

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

    e2e.ti.com/.../mcasp_5F00_issue.zip

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

    似乎问题是由 McASP.c 内的 MCASP_getHandle 中的 obj->isOpen 设置为 0 引起的、但我不确定导致这种情况的原因。

    MCASP_Handle MCASP_getHandle(uint32_t 索引)

    McASP_Handle = NULL;
    /*检查索引*/
    if (index < gMcaspConfigNum)

    McASP_Object *obj;
    OBJ = gMcaspConfig[index].object;

    if (obj &&(true == obj->isOpen ))

    /*有效句柄*/
    句柄= obj->句柄;
    }
    }
    回位手柄;
    }

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

    尊敬的 Satoshi:

    感谢您发送示例代码。 我尝试 编译您的示例代码。 它给了我一些错误、例如-  

    无法找到{PROJECT_ROOT}/AWECore/Lib。

    您能否确认是否未错过 zip 文件中的“AWECore"文件夹“文件夹、或者项目是否需要“AWECore/lib"?“?

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

    抱歉、不需要 AWECore。 您只需将其从属性链接中删除即可。

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


    重新创建工程并重试。 如果仍然遇到指示 'AWECore/lib' 找不到的错误、请从中删除与 AWECore 相关的链接器设置  Properties > Build > GNU Linker > Libraries

    e2e.ti.com/.../0513.mcasp_5F00_issue_5F00_2.zip

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

    尊敬的 Satoshi:

    感谢您的更新。 我正在查看代码、稍后会回来给您。

    此致、
    Ritapravo

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

    尊敬的 Ritapravo:

    我已经解决了问题 与所附项目不同、我实施了以下方法:

    void Drivers_open(void)
    {
    
        Drivers_uartOpen();
        Drivers_mcaspOpen(MCASP1);
        Drivers_mcaspOpen(MCASP2);
        Drivers_udmaOpen();
    
    }
    
    void Drivers_mcaspOpen(uint32_t mcaspNum)
    {
        int32_t  status = SystemP_SUCCESS;
    
    
        gMcaspHandle[mcaspNum] = NULL;   /* Init to NULL so that we can exit gracefully */
    
    
        /* Open all instances */
    
        if(!gMcaspOpenParams[mcaspNum].skipDriverOpen)
            {
            gMcaspHandle[mcaspNum] = MCASP_open(mcaspNum, &gMcaspOpenParams[mcaspNum]);
            if(NULL == gMcaspHandle[mcaspNum])
                {
                DebugP_logError("MCASP open failed for instance %d !!!\r\n", mcaspNum);
                    status = SystemP_FAILURE;
            }
        }
    
        if(SystemP_FAILURE == status)
        {
            /* Exit gracefully */
            Drivers_mcaspClose();
        }
    
        return;
    }
    
    void main()
    {
        Drivers_open();
        Drivers_mcaspOpen(MCASP0_A2B1);
    }

    因此、尽管 McASP1 和 McASP2 的初始未结呼叫成功、但 McASP0 的最终未结呼叫失败。 这会触发所有 McASP 实例的关闭操作。 因此,当我尝试检索所有 McASP 句柄时,它们都没有处于打开状态。

    问题已解决后、我可以关闭此主题。

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

    尊敬的 Satoshi:

    感谢您的确认更新。 想知道 — 在 McASP1 和 McASP2 帮您解决问题后打开 McASP0 实例[Drivers_mcaspOpen (McASP0_A2B1)]?

    此致、
    Ritapravo

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

    尊敬的 Ritapravo:

    是、问题已解决。

    成功初始化 McASP1 和 McASP2 后、McASP0 的初始化失败。 作为错误处理过程的一部分、所有 McASP 实例均已关闭、这已成为问题的根本原因。

    出现此问题的原因是我的实现基于自动生成的源代码、这导致了这种行为。

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

    尊敬的 Satoshi:

    感谢您的更新。 关闭此主题。

    此致、
    Ritapravo