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.

[参考译文] TMDS64EVM:5.4.5.7.4 对 PLLCTRL、HSDIV 和 PLL 进行编程的完整序列

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1642337/tmds64evm-5-4-5-7-4-entire-sequence-for-programming-pllctrl-hsdiv-and-pll

器件型号: TMDS64EVM

在我的 PRU0 代码中、我负责设置时钟、并按照 AM64x TRM 中“用于对 PLLCTRL、HSDIV 和 PLL 进行编程的 5.4.5.7.4 整个序列“(具体表 5-472)列出的分步说明进行操作。  

该代码的目的是设置以下时钟:

  • ICSSG1_CORE_CLK(使用 MAIN_PLL2_HSDIV0_CLKOUT)
  • ICSSG1_IEP_CLK(使用 MAIN_PLL2_HSDIV5_CLKOUT)
  • RGMII_250_CLK/RGMII_MHz_50_CLK /RGMII_MHz_5_CLK(使用 MAIN_PLL0_HSDIV4_CLKOUT)

按照表 5-472 中的顺序步骤操作时、对于“禁用 HSDIV (s)“步骤、我执行以下代码行以清除 PLL2 HSDIV CTRL0 寄存器中的位 15 (CLKOUT_EN):

MAIN_PLL_MMR_CFG_PLL2_HSDIV_CTRL0 且~μ s (1 << 15);

其中、I define th MAIN_PLL_MMR_CFG_PLL2_HSDIV_CTRL0 是定义为寄存器地址 0x68002080 的宏。

执行该行时、我收到以下错误消息、指示某种类型的电路板复位:

ICSS_G1_PRU_0:错误:(错误–1170 @ 0x300A2000)无法访问 DAP。 重置器件、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电、和/或尝试更可靠的 JTAG 设置(例如下 TCLK)。 (仿真包 20.0.0.3178)  
ICSS_G1_PRU_0:20 次尝试后无法确定目标状态
ICSS_G1_PRU_0:在断开连接之前从目标删除调试状态失败。  程序存储器中可能仍嵌入了断点操作码。  建议在连接并重新加载程序之前重置仿真器、然后再继续调试

如果我注释掉这一行、我根据表 5-472 执行的整个时钟设置序列会在 PLL0 和 PLL2 都没有错误的情况下运行、包括与同一 MAIN_PLL_MMR_CFG_PLL2_HSDIV_CTRL0 寄存器的所有其他交互(在这些步骤中会对其进行多次访问,包括在步骤结束时将位 15 设置为 1)。 与 MAIN_PLL_MMR_CFG_PLL2_HSDIV_CTRL0 交互的唯一时间  会导致问题、是当我清除上述位 15 时。  

清除 MAIN_PLL_MMR_CFG_PLL2_HSDIV_CTRL0 位 15 导致此处出现独特的独立问题的原因、或者如何解决该问题?

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

    您好:

    感谢您联系支持这个问题。  

    是否有理由清除(即禁用 HSDIV 时钟)该位字段? 该表明确列出了从未知状态执行 PLL“复位“以使其恢复运行 TRUE 的所有步骤。 我假设 在运行时禁用时钟 会导致问题。

    此外、我建议使用一些现成的软件示例、并并行参考 TRM 文档。 但同样、该表可以清除/复位 PLL 并再次启用、只需在电路板上启用它即可。

    谢谢、

    Alex

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

    我懂了。 现在我注释掉这一行、并让其余的 PLL 设置序列按原样运行、因为没有错误。 如果该位在复位后已经被清除(根据图 14-2428/表 14-7318 中定义的复位值)、那么再次向其写入 0 将可靠地导致系统复位/故障的原因是什么? 在这一点上,这是更多的好奇我的一部分比任何其他东西 — 写入一个 0 到一个可写位,其中一个 0 应该已经是安全的...

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

    您好、Seth。

    如果在完成上述将 PLL 置于安全状态(旁路,PLL 复位置为有效等)的步骤之前执行位 15 清除步骤、则下游时钟在仍处于运行状态时被切断—导致故障。

    请确认:

    • 在执行 MAIN_PLL_MMR_CFG_PLL2_HSDIV_CTRL0 &=~μ s (1 << 15) 之前、表中所有先前所需的步骤实际上已完成—特别是 PLL 处于旁路模式(旁路位置为有效)、PLL 复位会置位。  
    • 已轮询任何所需的锁定/状态位并处于正确的状态。
    • 检查前一个步骤是否静默失败。 您的线程在位 15 未清零时表示序列运行“无错误“、但您是在每个步骤之前轮询/等待状态位、还是只是写入并继续操作? 当您选通时钟时、错过的轮询可能会使 PLL 尚未处于旁路状态。

    此致、

    Borislav Lazarkov