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 上的外部时钟电源

Guru**** 2484615 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1542346/sk-am62-detecting-external-clock-supply-on-mcasp0

器件型号:SK-AM62
主题:SysConfig 中讨论的其他器件

工具/软件:

我想检测 McASP0 上外部时钟的电源。
我是根据以下位置的样片实施的:
C:\ti\mcu_plus_sdk_am62x_10_01_00_33\examples\drivers\mcasp\mcasp_playback_codec_aic31

虽然我已经阅读过相关文档(请参阅 www.ti.com/.../spruiv7b.pdf 的第 1073 页)、但我无法确定如何实现这一点。

具体来说、我想实现以下四个功能:

  1. 检测何时首次提供外部时钟(最初未提供)。
  2. 检测外部时钟何时停止。
  3. 检测何时再次为外部时钟供电。
  4. 检测到外部时钟后、重新启动 McASP 并输出到扬声器。

这与以下线程相关:
e2e.ti.com/.../sk-am62-how-to-properly-restart-mcasp0-after-calling-mcasp_close

如果可能、我希望获得基于源代码的指导。


我到目前为止尝试过的(供参考):

White check markμ s  工作中:

  • SYSCFG 配置为从 AUDIO_EXT_ERFX1 接收时钟。
  • 当时钟由 AUDIO_EXT_ERFP1 供电时、音频输出工作。
  • 如果 Drivers_mcaspOpen() 事先调用、则进行初始时钟检测。

Xμ s  不工作:

  • 初始时钟检测的逻辑似乎不正确。
  •  Drivers_mcaspOpen()  Drivers_mcaspClose() 的行为有问题。

Magμ s  我为时钟检测尝试的步骤:  (假设最初没有提供外部时钟)

  1. 调用  Drivers_mcaspOpen()
  2. 出现错误、但我继续处理:
    ERROR: Drivers_mcaspOpen:295: MCASP open failed for instance 0 !!!
  3. 根据文档进行初始化:
    void init_mcasp0_rclkchk()
    {
        uint32_t val = CSL_REG32_RD(MCASP0_RCLKCHK);
        val &= ((0x00 << 16) | (0x00 << 8));
        val |= (RCKCHK_MAX << 16);
        val |= (RCKCHK_MIN << 8);
        val |= (2 << 0);
        CSL_REG32_WR(MCASP0_RCLKCHK, val);
        CSL_REG32_FINS((CSL_MCASP0_CFG_BASE + MCASP_RSTAT_OFFSET), MCASP_RSTAT_RCKFAIL, 1u);
    }
    
  4. 检查 MCASP0_RCNT  RCKFAIL
    void chk_mcasp0_rcnt()
    {
        uint32_t rcnt = (CSL_REG32_RD(MCASP0_RCLKCHK) >> 24) & 0xFF;
        uint32_t rmax = (CSL_REG32_RD(MCASP0_RCLKCHK) >> 16) & 0xFF;
        uint32_t rmin = (CSL_REG32_RD(MCASP0_RCLKCHK) >> 8) & 0xFF;
        DebugP_log("[MCASP0]RCNT: %3u | RMAX: %3u | RMIN: %3u\r\n", rcnt, rmax, rmin);
    }
    
    bool poll_mcasp0_rckfail()
    {
        uint32_t isFail = CSL_REG32_FEXT((CSL_MCASP0_CFG_BASE + MCASP_RSTAT_OFFSET), MCASP_RSTAT_RCKFAIL);
        if (isFail == CSL_MCASP_RSTAT_RCKFAIL_YES)
        {
            DebugP_log("RCKFAIL: clock NG\r\n");
            CSL_REG32_FINS((CSL_MCASP0_CFG_BASE + MCASP_RSTAT_OFFSET), MCASP_RSTAT_RCKFAIL, 1u);
            return false;
        }
        else if (isFail == CSL_MCASP_RSTAT_RCKFAIL_NO)
        {
            DebugP_log("clock OK\r\n");
            return true;
        }
        else {
            DebugP_log("ERROR!! %d\r\n", isFail);
            return false;
        }
    }
    
  5. 提供外部时钟
  6. poll_mcasp0_rckfail() 返回 true
  7. Drivers_mcaspOpen() 失败、但在调用 Drivers_mcaspClose() 并重新打开后、成功
  8. Re 运行  init_mcasp0_rclkchk()
  9. 通话 MCASP_startTransferRx() / MCASP_startTransferTx() →扬声器输出正常
  10. 停止外部时钟
  11. poll_mcasp0_rckfail() 检测时钟停止
  12. 根据文档(,,,)停止 McASP MCASP_stopTransferRx MCASP_stopTransferTx MCASP_withdrawRx MCASP_withdrawTx
  13. Re 运行  init_mcasp0_rclkchk()
  14. 不会再次检测到外部时钟
  15. 调用 Drivers_mcaspClose() / Drivers_mcaspOpen() 使程序挂起
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Satoshi:

    感谢您的查询、并对延迟的回复深表歉意。 我将在本周查看您的查询、然后返回给您。

    此致、
    Ritapravo

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

    尊敬的 Ritapravo

    感谢您的初始回答。 我最初的问题可能因篇幅而不清楚、因此我想补充一点澄清。

    我要实现的目标是检测时钟输入状态。 要执行此操作、我要轮询的状态 MCASP_RSTAT_RCKFAIL

    当前、除非我调用 Drivers_mcaspOpen()、否则函数 poll_mcasp0_rckfail() 会一直返回 FALSE。 根据我的理解、似乎即使我没有 Drivers_mcaspOpen() 直接调用、其部分实现可能足以使检测 MCASP_RSTAT_RCKFAIL

    但是、我无法确定 Drivers_mcaspOpen() 实施的哪个部分负责启用的检测 MCASP_RSTAT_RCKFAIL

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

    尊敬的 Satoshi:  

    要使用 MCASP_RSTAT_RCKFAIL 检测外部时钟故障检测、必须配置 Rmax 和 RMIN 参数  McASP_RCLKCHK 先注册。 您可以查看该部分 12.1.1.4.15.6.1 时钟故障检查启动 其他功能。

    此致、
    Ritapravo

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

    尊敬的 Ritapravo:

    要使用 MCASP_RSTAT_RCKFAIL 检测外部时钟故障、必须配置 Rmax 和 RMIN 参数  McASP_RCLKCHK 先注册。 [/报价]

    我们无法正确检索 MCASP_RSTAT_RCKFAIL 没有实施 Drivers_mcaspOpen().
    (即使提供了外部时钟输入,也保持设置为 MCASP_RSTAT_RCKFAIL  Yes。)

     Drivers_mcaspOpen() 事先执行后、我们能够成功检测外部时钟故障。

    是否必须 Drivers_mcaspOpen() 提前执行才能正确检测外部时钟故障?

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

    尊敬的 Satoshi:

    是否必须 Drivers_mcaspOpen() 提前执行才能正确检测外部时钟故障?

    drivers_mcaspOpen() 将使用您在 SysConfig 中选择的参数配置 McASP 实例。 它还用于配置 DMA 和时钟。 因此, 必须先调用 Drivers_mcaspOpen()。

    此致、
    Ritapravo

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

    尊敬的  Ritapravo:

    才能理解 Drivers_mcaspOpen() 检测时钟所需的东西。
    此问题可以视为已结束。

    此致、
    Satoshi