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:是否应在使用`SOC_rcmPeripherEnablealClock`之前调用`SOC_controlModuleUnlockMMR`?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572736/am263p4-should-soc_controlmoduleunlockmmr-be-called-before-using-soc_rcmenableperipheralclock

器件型号: AM263P4

工具/软件:

您好、  

在`am263px/source/drivers/sdk/am263px/sdk.c`的以下 soc 代码中、soc 在启用/禁用外设时钟之前似乎没有解锁/锁定寄存器。  我认为必要的 b/c MSS_RCM 块使用锁定寄存器进行控制。  您能验证一下吗?

此外、您能否提供有关 同步机制的建议、以便多个内核解锁/锁定不会导致锁定写入?  例如、内核 0 解锁、内核 1 解锁、内核 0 写入寄存器 A、内核 0 锁定、内核 1 尝试写入寄存器 B(写入失败)  

-Colin

int32_t SOC_moduleClockEnable(uint32_t moduleId, uint32_t enable)
{
    int32_t status = SystemP_SUCCESS;

    status = SOC_rcmEnablePeripheralClock((SOC_RcmPeripheralId)moduleId, enable);

    return status;
}

int32_t SOC_moduleSetClockFrequency(uint32_t moduleId, uint32_t clkId, uint64_t clkRate)
{
    int32_t status = SystemP_SUCCESS;

    SOC_controlModuleUnlockMMR(0, MSS_RCM_PARTITION0);

    status = SOC_rcmSetPeripheralClock((SOC_RcmPeripheralId)moduleId, (SOC_RcmPeripheralClockSource)clkId, (uint32_t)clkRate);

	SOC_controlModuleLockMMR(0, MSS_RCM_PARTITION0);

    return status;
}

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

    您好 Colin、

    我已收到您的查询。 我将与团队核实此信息、并向您回复星期一提供的最新信息。 感谢您的耐心。

    此致、
    Aswathi

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

    您好 Colin、

    很抱歉耽误响应。

    在以下 soc 代码中、从`am263px/source/drivers/sdk/am263px/sdk.c` soc 似乎在启用/禁用外设时钟之前没有解锁/锁定寄存器。  我认为必要的 b/c MSS_RCM 块使用锁定寄存器进行控制。  您能否验证?

    是的、这是 SDK 中的缺失。 我添加了一个内部错误来解决这个问题。  

    由于要写入的值是默认值、因此未捕获到该错误。  

    此外、您能否提供关于 同步机制的建议、以便多个内核解锁/锁定不会导致锁定写入?  例如、内核 0 解锁、内核 1 解锁、内核 0 写入寄存器 A、内核 0 锁定、内核 1 尝试写入寄存器 B(写入失败) [/报价]

    通常、诸如时钟配置、PLL 配置、pinmux 配置等的控制寄存器(即需要锁定/解锁的寄存器)由一个内核控制以避免此问题。

    对于 MSS、TOP CTRL 或 RCM 中要从多个内核设置的任何特定寄存器、您是否有一个用例?

    谢谢。此致、

    Nikhil Dasan

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

    Nikhil,

    谢谢!  我们也可以在我们的代码中解决该问题。

    控制寄存器同步相关的信息。  例如、我们在 EPWM_CLKSYNC 中禁用/启用 CLKSYNC 位。

    我们将不同的功能(有时由不同的团队编写)组合到不同的内核中。  因此、如果每个内核负责初始化自己的时钟、就会更容易。

    -Colin

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

    我懂了。  

    从硬件的角度来看、无法在多个内核之间同步锁定/解锁。 您可以使用自旋锁来实现此同步。

    谢谢。此致、

    Nikhil Dasan