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.

[参考译文] AM263P4-Q1:阐述 MCSPI 时钟配置 (MSS_RCM.MCSPIx_CLK_STATUS.CLKINUSE) 位

Guru**** 2925090 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1652188/am263p4-q1-clarity-on-mcspi-clock-configurations-mss_rcm-mcspix_clk_status-clkinuse-bits

器件型号: AM263P4-Q1
主题: SysConfig 中讨论的其他器件

尊敬的团队:

根据 TRM、我配置了 MCSPI 时钟设置。 在通过轮询验证配置时 MCSPI0_CLK_STATUS.CLKINUSE、我希望该值 0x8 基于配置。 但是、轮询失败、观察到的回读值为 0x10

您能否帮助理解为什么 CLKINUSE 要反思 0x10 而不是 0x8


image.png

请确认它应该是 0x8 或 0x10 吗?

此致、

Shilpa.

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

    你好、Shilpa、

    0x8 PLL_CORE_CLKOUT0 PLL_PER_CLKOUT1 使用 TRM 第 6.4.8.2.4 节[1]中所述的配置序列选择或作为 MCSPI 时钟源时、是正确的预期值。 该 CLKINUSE 字段使用 单热编码 (位 7:0)来指示哪个源时钟实际处于活动状态[2]。

    回读 0x10 (二进制,位 000100004 集)而不是 0x8 (二进制,位 000010003 集)表示 不同的时钟源是活动的、而不是您要配置的时钟源。 这强烈建议您的时钟源选择写入 MSS_RCM.MCSPIx_CLK_SRC_SEL.CLKSRCSEL 不生效。

    MSS_RCM 寄存器(包括 MCSPI0_CLK_SRC_SEL)由 KICK 寄存器机制进行写保护。 您需要在写入前解锁它们、然后重新锁定。

    解锁序列:

    1. 写入 0x68EF3490 LOCK0_KICK0(地址) 0x5320_9008
    2. 写入 0xD172BC5A LOCK0_KICK1(地址) 0x5320_900C
    3. 修改目标寄存器(例如 MCSPI0_CLK_SRC_SEL)
    4. 向 KICK 寄存器写入任何其他值以重新锁定

    完整的解锁值表位于 TRM 中(表 5-10、“Kick Protection Register Unlock Values“)[1]。

    使用 SDK:

    您还可以使用 SDK 包装器函数:

    SOC_controlModuleUnlockMMR(0, MSS_RCM_PARTITION0);
    
    // Your register modification here
    SOC_rcmSetPeripheralClock(periphId, clkSource, freqHz);
    
    SOC_controlModuleLockMMR(0, MSS_RCM_PARTITION0);

    注意:SDK 中存在一个已知错误 SOC_rcmEnablePeripheralClock() 、该错误不在内部调用解锁/锁定序列[2]。 您需要在代码中手动处理此问题。

    SysConfig 替代器件:

    如果您使用 SysConfig、则 ClockTree 面板视图可让您直观地为每个外设选择时钟源和频率。 更改会自动生成 ti_power_clock_config.c 并在 SystemInit() -> PowerClock_init() [3]期间应用。 这种方法可以为您处理解锁/锁定和分频器配置。

    多核注意: 如果多个内核需要修改 MSS_RCM 寄存器、则锁定/解锁机制不存在硬件同步。 TI 建议使用 Spinlock 来协调内核之间的访问[2]。

    如果您对 MCSPI 实例所需的时钟源或频率有疑问、请告诉我。


    1. AM263P4:时钟门控 — E2E 主题
    2. AM263P4:是否应在使用 SOC_rcmEnablePeripheralClock 之前调用 SOC_controlModuleUnlockMMR
    3. MCU+ SDK ClockTree 文档

    此致、

    Zackary Fleenor