我正在使用带有 PRU_ICSSG 的处理器(AM24x、AM64x、AM65x),并使用 Code Composer Studio (CCS) 连接处理器。如何查看 PRU 内核的运行频率?如何更改 PRU 内核频率?
(客户须知:本文档正在编制中。如需反馈,请随时发表评论。我们将删除所有评论,并在编写完文档后锁定文章)
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.
我正在使用带有 PRU_ICSSG 的处理器(AM24x、AM64x、AM65x),并使用 Code Composer Studio (CCS) 连接处理器。如何查看 PRU 内核的运行频率?如何更改 PRU 内核频率?
(客户须知:本文档正在编制中。如需反馈,请随时发表评论。我们将删除所有评论,并在编写完文档后锁定文章)
答:
此次答复将说明一般步骤,后续将给出具体示例。
如何实现 ICSSG 内核时钟?
有关 PRU_ICSSG 时钟如何连接处理器的信息,请参阅处理器的技术参考手册 (TRM),先查看 TRM 的“PRU_ICSSG 集成”部分、“PRU_ICSSG 电源和时钟管理”部分,再看“PRU_ICSSG 时钟”表
ICSSG 中实际使用的 CORE_CLOCK 是通过 ICSSGn_CORE_CLK 或 ICSSGn_ICLK(250MHz,与接口时钟同步)选择的。CORE_CLOCK 通过寄存器 ICSSG_CORE_SYNC_REG、位 CORE_VBUSP_SYNC_EN 进行选择。
ICSSGn_CORE_CLK 可从不同的系统时钟中选择,具体取决于器件。ICSSGn_CORE_CLK 通过寄存器 CTRLMMR_ICSSGx_CLKSEL、位 CORE_CLKSEL 进行选择。
系统时钟是何时配置的?
在 CCS 中,PLL 输出时钟频率由 DMSC GEL 脚本配置,该脚本在 CCS 连接到处理器的 DMSC 时执行。DMSC GEL 脚本配置 PLL 和分频器设置,依据是... 是否有介绍客户如何查找此文件的通用指南?
TODO:AM64x_PLL_PARAMS_OFC1.gel 中的设置实际适用于哪些情况?如果用户使用 https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/08_01_00_07/exports/docs/api_guide_am64x/EVM_SETUP_PAGE.html#EVM_SOC_INIT_NOBOOT_MODE 或 https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/08_01_00_07/exports/docs/api_guide_am64x/EVM_SETUP_PAGE.html#EVM_SOC_INIT_SD_BOOT_MODE,它是否会被覆盖?
如何查看系统时钟频率?
提供了用于检查 PLL 配置的 GEL 脚本,该脚本可从 R5F0_0 或 DMSC 执行。要执行此脚本,须连接到所需的内核并执行:Scripts->PLL Configuration->Get PLL Configurations->Get_All_PLL_Configurations。GEL 脚本的输出可用于计算 PLL 输出频率。有关如何计算 PLL 输出频率的详细信息,请参阅 TRM 表“PLLTS16FFCLAFRACF 输出时钟”。
AM64x 示例:
ICSSGn_CORE_CLK 在 MAIN_PLL2_HSDIV0_CLKOUT(225MHz、300MHz)或 MAIN_PLL0_HSDIV9_CLKOUT(200MHz、250MHz、333MHz,即,1GHz/3)之间选择。
假设我们要将 ICSSG1 配置为 250MHz。
查看当前的 PRU 内核时钟频率
TRM ICSSG1 集成图中显示的时钟多路复用器的设置通过以下寄存器进行配置:
ICSSG1, CTRLMMR_ICSSG1_CLKSEL : 4300 8044h
ICSSG1, ICSSG_CORE_SYNC_REG : 300A 603Ch
可以在 CCS“Memory”窗口中观察或修改这些寄存器。
从 CCS“Memory”窗口:
0x40308044 = 0x00000000 => ICSSG1_CORE_CLK
0x300a603c = 0x00000000 => MAIN_PLL2_HSDIV0_CLKOUT
因此,ICSSG1 目前正在使用 MAIN_PLL2_HSDIV0_CLKOUT。
从 Get_All_PLL_Configurations GEL 脚本:
MAIN_Cortex_R5_0_0: GEL Output: Base address: 0x00680000
MAIN_Cortex_R5_0_0: GEL Output: PLL index: 0x00000002
MAIN_Cortex_R5_0_0: GEL Output: PLL index register base: 0x00002000
MAIN_Cortex_R5_0_0: GEL Output: Register: 0x00000020
MAIN_Cortex_R5_0_0: GEL Output: Reference Divider is: 1
MAIN_Cortex_R5_0_0: GEL Output: Feedback Divider is: 72
MAIN_Cortex_R5_0_0: GEL Output: Fractional Multiplier is: 0
MAIN_Cortex_R5_0_0: GEL Output: Output Divider #1 is: 1
MAIN_Cortex_R5_0_0: GEL Output: Output Divider #2 is: 1
MAIN_Cortex_R5_0_0: GEL Output: Number of hsdivs: 10
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #0's divider value is: 6
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #0's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #1's divider value is: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #1's clkout_en: 0
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #2's divider value is: 9
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #2's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #3's divider value is: 6
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #3's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #4's divider value is: 18
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #4's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #5's divider value is: 8
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #5's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #6's divider value is: 8
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #6's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #7's divider value is: 18
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #7's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #8's divider value is: 1
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #8's clkout_en: 0
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #9's divider value is: 5
MAIN_Cortex_R5_0_0: GEL Output: HSDIV #9's clkout_en: 1
MAIN_Cortex_R5_0_0: GEL Output: Parsed PLL configuration information.
OSC:25MHz
FOUTP = (25e6/1) * (72 + 0) / (1*1) = 1.8e9
FOUTPOSTDIV = 1.8e9/6 = 300e6,300MHz
因此,ICSSG1 内核时钟当前设置为 300MHz。
更改 PRU 内核时钟频率
TODO
1) 讨论我们如何使用 ICSSGn_ICLK(如示)或 MAIN_PLL0_HSDIV9_CLKOUT 并更改输出频率(如本示例其余部分所示)。我们是否需要特殊权限来通过“Memory”窗口修改任何寄存器?是否应该以不同的方式更新寄存器?
2) 讨论如何更改 PLL 和分频器设置。在哪些情况下,以下步骤是正确的?“当启动 CCS 并连接到 DMSC 时,将执行 DMSC GEL 脚本。在这种情况下,PLL 和分频器设置由 AM64x_PLL_PARAMS_OFC1.gel 中的设置决定,并且可以在 GEL 文件中进行修改。”需要记录哪些其他 PLL 初始化案例?