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.

PWM usng the OMAPL138 lcdk and CSL library

Other Parts Discussed in Thread: OMAP-L138

Hello I am trying to run the PWM modules in the OMAP 138 LCDK. Given that module zero is connected to the Ethernet PHY, I decided to use module 1.

I am trying to implement the example waveform in the OMAP-L138 user guide on page 472 figure 17-25. For which the register initialization is given on Table 17-19.  I am not interested in interrupts, just a simple waveform generation. So I am setting PLL, Setting the Pins, and the Initializing the resisters as shown in the Table 17-19, yet I don;t see any signal out in the pins using oscilloscope, either open or with a resistor to gnd of 10 Kohms.

The following shows essentially  what I am doing. Is there anything I am missing?. I am expecting after I do this the PWM modules should generate my signals... thank you.

I include:

#include <ti/csl/soc_C6748.h>

#include <ti/csl/cslr_syscfg0_C6748.h>
#include <ti/csl/cslr_psc_C6748.h>
#include <ti/csl/cslr_pllc_C6748.h>

#include <ti/csl/cslr_ehrpwm.h>

PLL section:

CSL_PllcRegsOvly pllcRegs = ((CSL_PllcRegsOvly) CSL_PLLC_0_REGS);

/* Set PLLENSRC '0', PLL Enable(PLLEN) selection is controlled through MMR */
    CSL_FINST(pllcRegs->PLLCTL, PLLC_PLLCTL_PLLENSRC, CLEAR);

    /*Set PLL BYPASS MODE */
    CSL_FINST(pllcRegs->PLLCTL, PLLC_PLLCTL_PLLEN, BYPASS);

    /*wait for some cycles to allow PLLEN mux switches properly to bypass clock*/
    delay(150);

    /* Reset the PLL */
    CSL_FINST(pllcRegs->PLLCTL, PLLC_PLLCTL_PLLRST, ASSERT);

    /*PLL stabilisation time*/
    delay(1500);

    /*Program PREDIV Reg, POSTDIV register and OSCDIV1 Reg
     1.predvien_pi is set to '1'
     2.prediv_ratio_lock_pi is set to '1', RATIO field of PREDIV is locked
     3.Set the PLLM Register
     4.Dont program POSTDIV Register
     */

    /* Set PLL Multiplier */
    pllcRegs->PLLM = pll_multiplier;

    /*wait for PLL to Reset properly=>PLL reset Time*/
    delay(128);

    /*Bring PLL out of Reset*/
    CSL_FINST(pllcRegs->PLLCTL, PLLC_PLLCTL_PLLRST, DEASSERT);

    /*Wait for PLL to LOCK atleast 2000 MXI clock or Reference clock cycles*/
    delay(2000);

    /*Enable the PLL Bit of PLLCTL*/
    CSL_FINST(pllcRegs->PLLCTL, PLLC_PLLCTL_PLLEN, PLL);
    delay(2000);

Pin Mux:

// Key to be written to enable the pin mux registers for write
    sysRegs->KICK0R = 0x83E70B13;
    sysRegs->KICK1R = 0x95A4F1E0;

//Enable the pinMux for eHRPWM EPWM1_A and EPWM1_B
    sysRegs->PINMUX5 |= ((CSL_SYSCFG_PINMUX5_PINMUX5_3_0_EPWM1A)<<(CSL_SYSCFG_PINMUX5_PINMUX5_3_0_SHIFT))\
                        |((CSL_SYSCFG_PINMUX5_PINMUX5_7_4_EPWM1B)<<(CSL_SYSCFG_PINMUX5_PINMUX5_7_4_SHIFT));

PWM Init:

//eHRPWM register overlay
CSL_EhrpwmRegsOvly pwm1Regs = (CSL_EhrpwmRegsOvly)(CSL_EHRPWM_1_REGS);

// Enable Power to eHRPWM ------------------------------------------------------
    // Set NEXT state of eHRPWM to ENABLE
    psc1Regs->MDCTL[CSL_PSC_EHRPWM] = CSL_PSC_MDCTL_NEXT_ENABLE;
    // move eHRPWM PSC to Next state
    psc1Regs->PTCMD = CSL_PSC_PTCMD_GO0_SET;
    // wait for transition
    while ( CSL_FEXT(psc1Regs->MDSTAT[CSL_PSC_EHRPWM], PSC_MDSTAT_STATE)
            != CSL_PSC_MDSTAT_STATE_ENABLE);

    pwm1Regs->TBPRD=0x0258;
    pwm1Regs->TBPHS=((CSL_EHRPWM_TBPHS_TBPHS_RESETVAL)<<(CSL_EHRPWM_TBPHS_TBPHS_SHIFT));
    pwm1Regs->TBCTR=0x0000;
    pwm1Regs->TBCTL=((CSL_EHRPWM_TBCTL_CTRMODE_UPDOWN)<<(CSL_EHRPWM_TBCTL_CTRMODE_SHIFT))
                    | ((CSL_EHRPWM_TBCTL_PHSEN_DISABLE)<<(CSL_EHRPWM_TBCTL_PHSEN_SHIFT))
                    | ((CSL_EHRPWM_TBCTL_PRDLD_FROMSHADOW)<<(CSL_EHRPWM_TBCTL_PRDLD_SHIFT))
                    | ((CSL_EHRPWM_TBCTL_SYNCOSEL_DISABLE)<<(CSL_EHRPWM_TBCTL_SYNCOSEL_SHIFT))
                    | ((CSL_EHRPWM_TBCTL_HSPCLKDIV_DIVBY4)<<(CSL_EHRPWM_TBCTL_HSPCLKDIV_SHIFT))
                    | ((CSL_EHRPWM_TBCTL_CLKDIV_DIVBY128)<<(CSL_EHRPWM_TBCTL_CLKDIV_SHIFT));
    pwm1Regs->CMPA= 0x0190;
    pwm1Regs->CMPB= 0x01F4;
    pwm1Regs->CMPCTL=((CSL_EHRPWM_CMPCTL_SHDWAMODE_SHADOW)<<(CSL_EHRPWM_CMPCTL_SHDWAMODE_SHIFT))
                    | ((CSL_EHRPWM_CMPCTL_SHDWBMODE_SHADOW)<<(CSL_EHRPWM_CMPCTL_SHDWBMODE_SHIFT))
                    | ((CSL_EHRPWM_CMPCTL_LOADAMODE_TBCTRZERO)<<(CSL_EHRPWM_CMPCTL_LOADAMODE_SHIFT))
                    | ((CSL_EHRPWM_CMPCTL_LOADBMODE_TBCTRZERO)<<(CSL_EHRPWM_CMPCTL_LOADBMODE_SHIFT));
    pwm1Regs->AQCTLA=((CSL_EHRPWM_AQCTLA_CAU_EPWMXAHIGH)<<(CSL_EHRPWM_AQCTLA_CAU_SHIFT))
                    | ((CSL_EHRPWM_AQCTLA_CAD_EPWMXALOW)<<(CSL_EHRPWM_AQCTLA_CAD_SHIFT));
    pwm1Regs->AQCTLB=((CSL_EHRPWM_AQCTLB_CBU_EPWMXBHIGH)<<(CSL_EHRPWM_AQCTLB_CBU_SHIFT))
                    | ((CSL_EHRPWM_AQCTLB_CBD_EPWMXBLOW)<<(CSL_EHRPWM_AQCTLB_CBD_SHIFT));