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.

AM2431: EPWM2 sync EPWM3

Part Number: AM2431

Tool/software:

Hi all TI experts,

I want to synchronize EPWM2 with EPWM3. Here is my code:

uint32_t addr = CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_PROXY;
uint32_t value = 1;
uint32_t registerValue = 0;
SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MAIN, 4);
registerValue = *(volatile uint32_t *) ((uintptr_t) addr);
registerValue &= ~CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_SYNCIN_SEL_MASK; // 先將要修改的位域清零
registerValue |= ((value << CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_SYNCIN_SEL_SHIFT) & CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_SYNCIN_SEL_MASK);
*(volatile uint32_t *) ((uintptr_t) addr) = registerValue;
SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MAIN, 4);

I understand that I need to unlock the CTRL_MMRs by using SOC_controlModuleUnlockMMR() before making any settings, but I am unsure which region to unlock. Could you please help clarify this? Thank you!

Best,

Larry

  • I found the problem, 

    uint32_t addr = CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_PROXY;
    uint32_t baseAddr;
    uint32_t value = 1;
    uint32_t registerValue = 0;
    SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MAIN, 1);
    baseAddr = (uint32_t) AddrTranslateP_getLocalAddr(CSL_CTRL_MMR0_CFG0_BASE);
    registerValue = *(volatile uint32_t *) ((uintptr_t) baseAddr + addr);
    registerValue &= ~CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_SYNCIN_SEL_MASK; // 先將要修改的位域清零
    registerValue |= ((value << CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_SYNCIN_SEL_SHIFT) & CSL_MAIN_CTRL_MMR_CFG0_EPWM3_CTRL_SYNCIN_SEL_MASK);
    *(volatile uint32_t *) ((uintptr_t) baseAddr + addr) = registerValue;
    
    registerValue = *(volatile uint32_t *) ((uintptr_t) addr);
    SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MAIN, 1);

    Because the CTRLMMR_EPWM3_CTRL register actually address is 0x4300 614C, I wrote value to wrong address, and the unlock partition is 1, after correct, the EPWM2 perfectly sync with EPWM3.

    Best,

    Larry