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/TMS320DM8148:在 dm8148中降低 DSP 功耗

Guru**** 2606725 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/636632/rtos-tms320dm8148-reduce-dsp-power-in-the-dm8148

器件型号:TMS320DM8148
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好,

我们正在使用 DM8148 、RDK 04_01_00_02, 其中 DSP c674执行 音频 处理。

 DSP 使用 SYSBIOS 6。

我们没有 DVFS 功能。

降低功耗的方法是什么?

您能告诉序列来执行它。

我们如何将其降低 到非常低的水平。

音频子系统会发生什么情况: CODEC、MCASP 和 EDMA。

 (我们使用 aic3107) ,是否在某些情况下初始化?

 

此致,Shlomo。

 

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

    当无需音频处理时、您可以使用 DSP (GEM)的暂停/恢复电源管理来降低其功耗。 有关更多信息、请参阅以下 wiki 页面:

    processors.wiki.ti.com/.../TI81XX_PSP_User_Guide
    processors.wiki.ti.com/.../TI81XX_PSP_PM_SUSPEND_RESUME_User_Guide
    processors.wiki.ti.com/.../TI81XX_PSP_PM_FAQ

    processors.wiki.ti.com/.../DM814x_AM387x_Power_Estimation

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

    非常感谢。
    我需要花时间了解该主题,以便验证答案。
    再次感谢(-:
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Pavel,

    虽然很粗略,但我需要了解更多。

    我编写了一个简单的驱动程序,将这些寄存器写入:(基于文件 Dm8168DspPwer.c)
    CM_GEM_CLKSTCTRL、CM_ACTIVE_GEM_CLKCTRL、DSP_IDLE_CFG。

    我设法看到 DSP 进入待机模式,在我们的设备消耗500毫安时,15毫安时
    压降。 (这足够了吗?)

    我们知道:DSP 在进入待机模式时会发生什么情况?
    如果时钟没有下降到低电平,则它是相关的寄存器。

    是否可以在 Linux 中管理 DSP 时钟以节省功耗?

    为什么在 DSP 文件中关闭 spinbox_CLKCTRL 和 mailbox_CLKCTRL,
    并非所有 SoC 模块都使用它们吗?

    DSP 是否可以关闭?

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

    Shlomo、

    [引用 user="Shlomo Kabaza]]我编写了一个简单的驱动程序,用于写入这些寄存器:(基于文件 Dm8168DspPwer.c )
    CM_GEM_CLKSTCTRL、CM_ACTIVE_GEM_CLKCTRL、DSP_IDLE_CFG。

    我设法看到 DSP 进入待机模式,在我们的设备消耗500毫安时,15毫安时
    压降。 (这足够了吗?) [/报价]

    同时确保 DSP PLL 已关闭(未锁定)。 检查寄存器 DSPPLL_CLKCTRL 和 DSPPLL_STATUS。 确保 CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0、[17:16] IDLEST = 0x3、[18] STBYST = 0x1

    [引用 USER="Shlomo Kabaza)]我们知道:DSP 在进入待机模式时会发生什么情况?
    如果时钟没有下降到低电平、则它是相关的寄存器。

    当 DSP 进入待机模式时、DSP 时钟应该被选通。 您可以在寄存器 CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE 中检查该值。 当进入待机模式时、该 MODULEMODE 值应从0x2切换到0x0。

    [报价用户="Shlomo Kabaz"]是否可以在 Linux 中管理 DSP 时钟以节省功耗?

    是的。 我在上一个帖子中提供的链接对此进行了全面说明。

    [引用 user="Shlomo Kabaza]DSP 文件中为什么会关闭 spinbox_CLKCTRL 和 mailbox_CLKCTRL,
    是否所有 SoC 模块都未使用它们?[/quot]

    Spinlock 和邮箱不是所有 DM814x SoC 模块都使用的、而是仅来自 Cortex-A8、DSP、Cortex-M3、HDVICP2。 关闭 DSP 电源时、如果您仍然通过自旋锁/邮箱在 A8、M3和 HDVICP2之间进行通信、则可以使其时钟信号保持启用状态。

    [报价用户="Shlomo Kabaz"] DSP 是否可以关闭?

    是的、可以。 请参阅以下 e2e 主题:

    e2e.ti.com/.../937019

    此致、
    帕维尔

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

    你好,Pavel,

    非常感谢您的回答。

    但是,在您解释之后 ,似乎 任务没有 完成。

    我 正在编写此序列:

    reg = __raW_readl (CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);

    reg &= 0xFFFFFFCF;

    __raW_writel ( reg, CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);

    __raW_writel (0x01,PRCM_BASE_ADDR + CM_GEM_CLKSTCTRL);

    _raW_writel (0x01、PRCM_BASE_ADDR + CM_ACTIVE_GEM_CLKCTRL);

     我 读取这些值:

                CM_GEM_CLKSTCTRL:0x00000601

      CM_ACTIVE_GEM_CLKCTRL:0x00060002

                            DSP_IDLE_CFG:0x00000008

                        DSPPLL_CLKCTRL:0x281b0811

                           DSPPLL_STATUS:0xc0000630

     您能不能告诉我,我犯了什么错误或遗漏了什么?

    此致。

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

    Shlomo、

    [引用 user="Shlomo Kabaz"]_raW_writel (0x01、PRCM_BASE_ADDR + CM_ACTIVE_GEM_CLKCTRL);[/引用]

    [引用用户="Shlomo Kabaz"] CM_ACTIVE_GEM_CLKCTRL:0x00060002[/QUERP]

    为什么在 CM_ACTIVE_GEM_CLKCTRL 寄存器中写入0x1? 允许的值为0x0 (禁用时钟)和0x2 (启用时钟)。 如果您的任务是禁用 DSP 时钟、则写入0x0、而不是0x1。

    此致、
    帕维尔

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

    你好 ,Pavel,

    谢谢。

    我 写这一次0 ,看起来更好:

      在待机模式下、寄存器为:

                CM_GEM_CLKSTCTRL:0x00000001

      CM_ACTIVE_GEM_CLKCTRL:0x00070000

                            DSP_IDLE_CFG:0x00000000

      电流下降幅度更大。

      但当我尝试 退出待机状态并检查 DSP 状态时,问题仍然存在:

          为了 脱离待机状态,我写了:

               CM_GEM_CLKSTCTRL = 0x00000002

      CM_ACTIVE_GEM_CLKCTRL = 0x00000002

                            DSP_IDLE_CFG = 0x00000028

      但 DSP 停止响应!!!

      我一直与仿真器连接 ,它说 DSP 保持在复位状态。

      在 DSP 中,要使该过程正常工作,我必须做些什么。

      在我之前的 ARCH 中, TI 5510有一 个“IDLE”命令,我们是否也有它?

       当进入待机模式(现在它不是)时,DSP 是否应该处于驻留在内部 RAM 中 的功能中????

    此致。

     

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

    [引用用户="Shlomo Kabaz"]

    我 写这一次0 ,看起来更好:

      在待机模式下、寄存器为:

                CM_GEM_CLKSTCTRL:0x00000001

      CM_ACTIVE_GEM_CLKCTRL:0x00070000

                            DSP_IDLE_CFG:0x00000000

      电流下降幅度更大。

      但当我尝试 退出待机状态并检查 DSP 状态时,问题仍然存在:

          为了 脱离待机状态,我写了:

               CM_GEM_CLKSTCTRL = 0x00000002

      CM_ACTIVE_GEM_CLKCTRL = 0x00000002

                            DSP_IDLE_CFG = 0x00000028

      但 DSP 停止响应!!!

    [/报价]

    Shlomo、

    当使用 Linux 内核时、当使用暂停/恢复时、您不应直接写入 DSP 时钟寄存器、这应该由暂停/恢复功能来完成。

    当您希望所有 DM814x 器件暂停(包括 DSP)时、您应该从用户空间执行以下命令:

    $ echo -n"mem">/sys/power/state

    然后、以下 Linux 内核函数应在暂停过程中禁用 DSP 时钟:

    ti814x_DSP_POWER_SUSP()-> clk_disable (DSP_dev->ick)、clk_disable (DSP_dev->fck) 

    然后、当 DM814x 器件唤醒时、它执行恢复过程:

    ti814x_DSP_POWER_RESUME ()-> clk_enable (DSP_dev->ick)、clk_enable (DSP_dev->fck) 


    当您暂停 DSP (进入待机模式、禁用时钟)时、您需要整个 DM814x 器件暂停(包括 DSP)还是只需要 DSP 暂停?

    此致、
    帕维尔

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

    谢谢。

    我们不使用您所指的框架。

    我被指示只将 DSP 置于待机状态。

    我们使用的是 DVRDK 04_01_00_02,其中处理“SUSPEND”的框架与不同
    你所指的一个。
    在该 env 中,“suspend”框架位于 Syslink 中,并通过以下文件生成:
    ClockOps.c、Dm8168Clock.c、Dm8168DspPwr.c
    我们现在不能使用这个框架!

    从这些文件中,我尝试了解 DSP 的暂停/恢复序列。

    您能告诉我们调用 DSP 的待机寄存器序列时 DSP 的状态是什么吗?

    我们是否应该为此过程更改另一个寄存器?


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

    Shlomo、

    [引用 user="Shlomo Kabaza]\n 我们不使用您所指的框架。

    我被指示只将 DSP 置于待机状态。[/QUERT]

    好的、这是可行的。 应使用脚本或直接从用户空间更改这些 PRCM 寄存器。 当您尝试将 DSP 置于待机状态时、您能向我发送您正在执行的所有步骤吗?

    [引用 user="Shlomo Kabaza]\n 我们使用的是 DVRDK 04_01_00_02,其中处理“暂停”的框架与不同
    您指出的一个。

    我不熟悉 DVR RDK、我不能就 DVR RDK 的特定事项向您提出建议。 您可以向 TI 网络合作伙伴咨询 DVR RDK 支持。

    [引用 user="Shlomo Kabaza)]当我们调用 DSP 的待机寄存器序列时,您能不能告诉您它处于什么状态? [/报价]

    在调用待机过程之前、DSP 应处于活动状态。

    [引用 user="Shlomo Kabaz"]我们是否应该为此过程更改另一个寄存器?

    不,我不这么认为。 请将所有步骤和确切步骤发送给我以供审核。

    此致、
    帕维尔

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

    你好 ,Pavel,

    现在、我只使用以下序列:

           要 将 DSP 置于待机状态:

               reg = __raW_readl (CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);

               reg &= 0xFFFFFFCF;

              __raW_writel ( reg, CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);

             __raW_writel (0x01,PRCM_BASE_ADDR + CM_GEM_CLKSTCTRL);

             _raW_writel (0x00、PRCM_BASE_ADDR + CM_ACTIVE_GEM_CLKCTRL);

     

         要 退出 DSP 待机模式:

               reg = __raW_readl (CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);

               reg |= 0x00000028;

              __raW_writel ( reg, CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);

             __raW_writel (0x02,PRCM_BASE_ADDR + CM_GEM_CLKSTCTRL);

             __raW_writel (0x02,PRCM_BASE_ADDR + CM_ACTIVE_GEM_CLKCTRL);

     可以吗?

     

    此致。

     

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

    [引用 user="Shlomo Kabaz"]  将 DSP 置于待机状态:[/引用]

    您是要完全关闭 DSP 还是只需要禁用 DSP 时钟信号?

    如果只需要禁用 DSP 时钟信号、则无需修改 DSP_IDLE_CFG 寄存器。 第一个 DSP 时钟由 CM_ACTIVE_GEM_CLKCTRL 和 CM_GEM_CLKSTCTRL 启用/禁用、第二个时钟由 DSP PLL 控制。

    如果您需要完全关闭 DSP 电源、除了禁用时钟信号之外、还应修改 DSP_IDLE_CFG 寄存器、RM_DEFAULT_RSTCTRL、PM_DEFAULT_PWRSTCTRL。 这在我之前提供的 e2e 线程中进行了解释。

    此致、
    帕维尔

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

    我调用进入 DSP 待机状态的顺序为:

    reg =__raW_readl (CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);
    reg &= 0xFFFFFFCF;
    __raW_writel (reg,CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);
    __raW_writel (0x01,PRCM_BASE_ADDR + CM_GEM_CLKSTCTRL);
    _raW_writel (0x00、PRCM_BASE_ADDR + CM_ACTIVE_GEM_CLKCTRL);

    然后我读取这些值:

    CM_GEM_CLKSTCTRL:0x00000001
    CM_ACTIVE_GEM_CLKCTRL:0x00070000
    DSP_IDLE_CFG:0x00000008
    DSPPLL_CLKCTRL:0x281b0811
    DSPPLL_STATUS:0xc0000638
    ------------------------------------------

    要退出待机状态、我调用:

    reg =__raW_readl (CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);
    reg |= 0x00000028;
    __raW_writel (reg,CTRL_MODULE_BASE_ADDR + DSP_IDLE_CFG);
    __raW_writel (0x02,PRCM_BASE_ADDR + CM_GEM_CLKSTCTRL);
    __raW_writel (0x02,PRCM_BASE_ADDR + CM_ACTIVE_GEM_CLKCTRL);

    然后我读取这些值:

    CM_GEM_CLKSTCTRL:0x00000702
    CM_ACTIVE_GEM_CLKCTRL:0x00000002
    DSP_IDLE_CFG:0x00000028
    DSPPLL_CLKCTRL:0x281b0811
    DSPPLL_STATUS:0xc0000638


    我缺少什么?

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

    [报价用户="Shlomo Kabaz"]我缺少什么?

    您未能回答我的问题、也未能在我之前的回复中查看我的指南。

    此致、
    帕维尔

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

    谢谢 我没有看到最后两个帖子。

    我们确实需要两个选项:"完全禁用 DSP"和"在出现时节省 DSP 的功耗"。

    第二个是最重要的:DSP 启动并运行后,我们需要尽可能降低它的功耗
    而无需加载或重新加载软件即可再次使用它,
    我从您的帖子中了解到,这应该通过写信给以下地址来实现:
    CM_ACTIVE_GEM_CLKCTRL = 0x00
    CM_GEM_CLKSTCTRL = 0x01

    但我应该向 DSP PLL 写入什么= DSP 运行时可以减少这个时钟。
    我们认为 DSP PLL 只能在 u-boot 中设置、并且在 Linux 内核处于活动状态或时无法更改
    DSP 启动后?

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

    首先尝试仅禁用 gel_ick、然后启用它。

    1. DSP 处于活动状态并正在运行,我们在此禁用 iclk:

    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x1
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0

    在此处查看功耗的影响。

    2. DSP 未激活,我们在此再次启用节拍:

    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x0
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x2

    首先验证您是否能够禁用并成功启用 DSP、然后我们可以继续执行 FCK、然后再继续供电。

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

    我执行了以下序列:
    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x1
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0

    我现在读取寄存器的状态、它们是:
    CM_GEM_CLKSTCTRL:0x701
    CM_ACTIVE_GEM_CLKCTRL:0x10000

    但 DSP 正在运行,功耗是相同的(相同的电流)!!!

    现在怎么办?

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

    [引用 user="Shlomo Kabaz"]我按以下顺序操作:
    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x1
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0[/引用]

    在执行该序列之前、这些寄存器中的值是多少?

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

    值为:
    CM_GEM_CLKSTCTRL:0x702
    CM_ACTIVE_GEM_CLKCTRL:0x2

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

    您能否尝试以下序列:

    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x1
    2.等待1秒钟
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0
    4.等待1秒钟
    5.读取 CM_GEM_CLKSTCTRL、CM_ACTIVE_GEM_CLKCTRL
    6.检查功耗和电流

    您能否还提供有关"但 DSP 正在运行"的更多详细信息? 这话到底是什么意思? 如何在 MODULEMODE = 0x0后检查 DSP 是否正在运行?

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

    执行上述序列后、我得到:
    CM_GEM_CLKSTCTRL:0x701
    CM_ACTIVE_GEM_CLKCTRL:0x10000

    在这种状态下,我告诉 ARM 的 DSP 打印一个 msgs 列表,它确实打印了。
    我让 DSP 每秒向我打印一个以 my_idle_loop 和为增量的高度计数器
    在常规操作模式下,它是94 000 000 000 000 000 000 000。

    请注意,DSP 是音频处理,并从 Tick SysBIOS、EDMA etz 中断 RCV。

    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在尝试停止时钟之前、当 DSP 处于活动状态时、您能否提供 RM_ACTIVE_RSTCTRL 寄存器的值?

    请尝试以下步骤:

    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x1
    2.等待1秒钟
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0
    4.等待1秒钟
    RM_ACTIVE_RSTCTRL = 0x3
    6.等待1秒钟
    7.读取 CM_GEM_CLKSTCTRL、CM_ACTIVE_GEM_CLKCTRL、RM_ACTIVE_RSTCTRL
    8.检查功耗和电流

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

    在我执行该序列之前,您接受了以下内容:
    CM_GEM_CLKSTCTRL:0x702
    CM_ACTIVE_GEM_CLKCTRL:0x2
    RM_ACTIVE_RSTCTRL:0

    保存序列后:
    CM_GEM_CLKSTCTRL:0x700
    CM_ACTIVE_GEM_CLKCTRL:0x50000
    RM_ACTIVE_RSTCTRL:3.

    但是,电流还是一样的,没有像电源一样变化!!

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

    [引用用户="Shlomo Kabaz"] CM_GEM_CLKSTCTRL:0x700[/引用]

    确保在 CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL 中写入0x1 (而不是0x0)。

    如果有任何差异、请尝试以下序列并报告:

    RM_ACTIVE_RSTCTRL = 0x3
    2.等待1秒钟
    CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL = 0x1
    4.等待1秒钟
    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0x0
    6.等待1秒钟
    7.读取 CM_GEM_CLKSTCTRL、CM_ACTIVE_GEM_CLKCTRL、RM_ACTIVE_RSTCTRL
    8.检查功耗和电流

    此致、
    帕维尔

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

    感谢您的回答。

    这次我要确保将0x01写入 CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL!

    在保存最后一个序列后,我得到:
    CM_GEM_CLKSTCTRL:0x701
    CM_ACTIVE_GEM_CLKCTRL:0x50000
    RM_ACTIVE_RSTCTRL:3.

    仍然,当前未更改。

    您能告诉我这些寄存器在激活序列后应该是什么吗?

    我们还能谈谈第二个 DSP 时钟。


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

    [引用 USER="Shlomo Kabaz"]这次我要确保我要向 CM_GEM_CLKSTCTRL[1:0] CLKTRCTRL 写入0x01!

    在保存最后一个序列后,我得到:
    CM_GEM_CLKSTCTRL:0x701
    CM_ACTIVE_GEM_CLKCTRL:0x50000
    RM_ACTIVE_RSTCTRL:3.

    仍然,当前未更改。

    您能告诉我激活序列后这些寄存器应该是什么吗。

    CM_ACTIVE_GEM_CLKCTRL 应为0x70000。 也许您还应该在这个序列中修改 DSP_IDLE_CFG、问题是 DSP_IDLE_CFG 寄存器只能通过主管/权限级别访问、因此不能从用户空间访问。 这在下面的 e2e 线程中进行了讨论:

    [引用 user="Shlomo Kabaz"]我们还能不能讨论第二个 DSP 时钟。

    您应该禁用 DSP PLL、请尝试以下序列:

    检查 PLLSS_MMR_LOCK 寄存器是否配置为允许访问 PLL 寄存器。 在访问 PLL 寄存器之前、请确保写入517622845 (0x1EDA4C3D)的值。

    2.设置 DSPPLL_CLKCTRL[23] IDLE = 0x1

    3.等待 DSPPLL_STATUS[0] BYPASS =1和 DSPPLL_STATUS[8] BYPASSCK =1

    4.清除 DSPPLL_CLKCTRL[0] TINITZ = 0x0

    5、设置 DSPPLL_PWRCTRL[0] OFFMODE = 0x1

    检查 DSPPLL_STATUS 寄存器、它应该报告 PLL 未激活(当 DSP PLL 处于激活和锁定状态时、比较该序列之前的值)。

    6.1您也可以在此处查看 CM_ACTIVE_GEM_CLKCTRL 寄存器

    7.检查 DSP 是否仍然处于活动状态,如果仍然可以处理数据

    8.检查功耗和电流

    此致、
    帕维尔

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

    感谢您的回答。

    我现在处理寄存器没有问题,因为我现在在内核中执行所有操作。
    我再次尝试了 DSP_IDLE_CFG,电流以20mil 下降,但我不知道如何返回到全功率和可操作的 DSP,
    你是吗?

    我尝试了您的序列,它工作正常,它也使电流下降了20毫米。

    但最大的成功是当我执行了类似 u-boot 的 PLL 设置(从那里复制了代码序列)并阅读了其中一篇文章
    通过更改 DSP_M2来降低 DSP 频率。

    我将 DSP 频率除以100 (设置 DSP_M2 = 100),电流似乎再次下降20毫伏,
    然后将 DSP PLL 频率恢复为正常、所有系统音频看起来都正常!!

    在您看来,这是处理 DSP"睡眠"省电的好方法。

    另外,您认为我应该关闭其它“音频子系统组件”,如编解码器、EDMA 和 McASP 吗?


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

    [引用 user="Shlomo Kabaza]I 重试了 DSP_IDLE_CFG,电流在20mil 内下降,但我不知道如何返回到全功率和可操作 DSP,
    您是否?[/报价]

    请提供您为降低功耗然后恢复至全功率而执行的确切序列、我将查看。

    [引用 user="Shlomo Kabaz">但最大的成功是当我执行 PLL 设置(如 u-boot 中的设置)(从那里复制了代码序列)并阅读您的一篇文章
    通过更改 DSP_M2来降低 DSP 频率。

    我将 DSP 频率除以100 (设置 DSP_M2 = 100),电流似乎再次下降20毫伏,
    然后将 DSP PLL 频率恢复为正常、所有系统音频看起来都正常!!

    在您看来,这是处理 DSP"睡眠"节电的好方法。

    对于 DSP 睡眠功率状态、我认为更好的解决方案是完全关闭 DSP PLL 时钟(而不仅仅是降低 DSP PLL 时钟频率)。

    [引用 user="Shlomo Kabaz"]此外,您是否认为我应该关闭其它“音频子系统元素”,如编解码器、EDMA 和 McASP?

    具体取决于您的用例。 如果您将这些元件断电、您将获得更好的功耗、但在从全功率切换到低功率时会获得更高的延迟、在从低功率切换到全功率时会获得更高的延迟。

    此致、
    帕维尔

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

    感谢您的回答。
    我很抱歉耽误了时间,我们遇到了紧急情况,我也在寻找。

    我了解到在使用 DSP_IDLE_CFG 寄存器并将 DSP 插入待机状态时,DSP 必须在复位后具有。
    这不是我们想要的,更进一步,当 DSP 进入待机状态时,电流下降大约为20毫安
    它也是当我降低 DSP PLL 或使用您向我展示的"门控 DSP PLL"序列时节省的电流量。

    当我使用您的"门 DSP PLL"序列时、电流会下降、但 DSP 仍会通过 syslink 响应通信
    (工作速度较慢)。 这是否正常?

    在我们的项目中,我们不需要使用视频,只需要使用 LCD。
    执行这些功能(不使用视频设备)时,可以关闭哪些模块?

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

    [引用 USER="Shlomo Kabaz"]当我使用您的"门 DSP PLL "序列时、电流会下降、但 DSP 仍然通过 syslink 对通信做出响应
    (工作速度较慢)。 这是否正常?

    DPLL_DSP 为 DSP 内核提供功能时钟。 此时(DPLL_DSP 选通)、您可以检查以下位中是否有预期值:

    DSPPLL_PWRCTRL[0] OFFMODE = 1.

    DSPPLL_CLKCTRL[23] IDLE = 1

    DSPPLL_STATUS[10] PHASELOCK = 0、[9] FREQLOCK = 0、[8] BYPASSCK = 1、[0] BYPASS = 1

    CM_ACTIVE_GEM_CLKCTRL[1:0] MODULEMODE = 0、[17:16] IDLEST = 0x3、[18] STBYST = 1

    请注意、我们还有从 DPLL_L3到 DSP 内核的接口(互连)(ick)(sysclk4)时钟。 由于该时钟仍处于活动状态、这可能是 DSP 内核通过 syslink 进行响应的原因。

    [引用 user="Shlomo Kabaza)]在我们的项目中,我们不需要使用视频,只需使用 LCD。
    执行这些功能(不使用视频设备)时,可以关闭哪些模块?

    在我看来、这似乎是另一个问题、与此 e2e 线程的主题无关。 请打开与相应主题相关的新 e2e 主题。

    此致、
    帕维尔

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

    此帖子和您的其他人对我们非常有帮助。
    我们将在将来再次讨论这个问题。

    度过美好的一年!

    Shlomo, Elbit systems -以色列.