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.

AM4379: eCAP init issue

Part Number: AM4379

Hello,

im using the idkam437x Eval Board with Pdkam437x 1.0.15 now i want to generate on eCAP1 (PinJ24) a PWM Signal

when i run my Initalisation it runs into deadlock when it comes to ECAPSetOperMode.

void APWM_Init(void)
{

    int32_t status = S_PASS;
    uint32_t baseAddr = 0;

    if (TRUE == CHIPDBIsResourcePresent(CHIPDB_MOD_ID_PWMSS, 1U))
    {
        baseAddr = CHIPDBBaseAddress(CHIPDB_MOD_ID_PWMSS, 1U);
    }
    else
    {
        status = E_FAIL;
    }

    /* ECAP Module Enable  */
    status = PRCMModuleEnable(CHIPDB_MOD_ID_PWMSS, 1U, 0U);

    //Pinmux eCAP1_in_PWM1_out Pin J24
    HW_WR_REG32(baseAddr + PIN_UART0_TXD, PIN_MODE(4));

    PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 1U, NULL);

    // Enable Clock
    ECAPClkEnable(baseAddr, TRUE);

    // Set to APWM Mode
    ECAPSetOperMode(baseAddr, ECAP_APWM_MODE);
    //Set DutyCycle and Period
    ECAPApwmOutputConfig(baseAddr, COMPARE_APWM, PERIOD_APWM);

}

Can you tell me what i am doing wrong ? 

  • Hi I Tried to do the same thing with the CSL instead of dal  now it doesent Crash but i dont have PWM Signal on Pinj24

    void APWM_Init(void)
    {
    
        int32_t status = S_PASS;
        uint32_t baseAddr = 0;
    
        if (TRUE == CHIPDBIsResourcePresent(CHIPDB_MOD_ID_PWMSS, 1U))
        {
            baseAddr = CHIPDBBaseAddress(CHIPDB_MOD_ID_PWMSS, 1U);
        }
        else
        {
            status = E_FAIL;
        }
    
    
        /* ECAP Module Enable  */
        status = PRCMModuleEnable(CHIPDB_MOD_ID_PWMSS, 1U, 0U);
    
        //Pinmux eCAP1_in_PWM1_out Pin J24
        PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 1U, NULL);
        HW_WR_REG32(baseAddr + PIN_UART0_TXD, PIN_MODE(4));
    
        ECAPClockEnable(baseAddr);
     
        ECAPCaptureLoadingEnable(baseAddr);
    
        // Set to APWM Mode
     
        ECAPOperatingModeSelect(baseAddr, ECAP_APWM_MODE); 
    
        ECAPAPWMCaptureConfig(baseAddr,COMPARE_APWM,PERIOD_APWM);
    
        ECAPAPWMPolarityConfig(baseAddr, ECAP_APWM_ACTIVE_HIGH);
    
        ECAPCounterControl(baseAddr, ECAP_COUNTER_FREE_RUNNING);
    
    
    }
    

    Any Advice ?

  • Hi,

    Browsing through AM437x PRSDK, I don't observe an example for eCAP for APWM generation. eCAP APWM mode is described in the AM437x TRM, 20.3.2.2.8 APWM Mode Operation.

    Can you connect via JTAG (continuous refresh) and confirm TSCTR is counting?

    What values are you using for CAP1 (period) and CAP2 (compare)? Is the compare value within the period?

    Have you double checked your pinmux settings?

    Regards,
    Frank

  • Hi,

    thanks for pointing me to the right direction,

    i  mismatched my Baseaddresses i used the Baseadress of PWMSS1 adress instead of SOC_PWMSS1_ECAP_REG

    for others this is my working code:

    int32_t APWM_Init(void)
    {
    
        int32_t status = S_PASS;
    
        /* PWMSS_ECAP Module & Clk Enable  */
        status = PRCMModuleEnable(CHIPDB_MOD_ID_PWMSS, 1U, 0U);
    
        uint32_t ctrlModBase;
        ctrlModBase = CHIPDBBaseAddress(CHIPDB_MOD_ID_CONTROL_MODULE, 0);
    
        //Pinmux eCAP1_in_PWM1_out Pin J24
        HW_WR_REG32(ctrlModBase + PIN_UART0_TXD, PIN_MODE(4)|PIN_PULL_UP_EN| PIN_RX_ACTIVE);
    
     //   ECAPClockEnable(baseAddr);
    
        ECAPOperatingModeSelect(SOC_PWMSS1_ECAP_REG, ECAP_APWM_MODE);
    
        ECAPCounterConfig(SOC_PWMSS1_ECAP_REG, 0);
    
        ECAPAPWMCaptureConfig(SOC_PWMSS1_ECAP_REG,COMPARE_APWM,PERIOD_APWM);
    
        ECAPAPWMPolarityConfig(SOC_PWMSS1_ECAP_REG, ECAP_APWM_ACTIVE_HIGH);
    
        ECAPSyncInOutSelect(SOC_PWMSS1_ECAP_REG, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
    
        ECAPCounterControl(SOC_PWMSS1_ECAP_REG, ECAP_COUNTER_FREE_RUNNING);
    
        return status;
    
    
    }

  • Hi,

    I'm glad to hear the issue is resolved.

    Regards,
    Frank