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.

ePWM for creating 500 useconds delay

Other Parts Discussed in Thread: TMS320F2808, TMS320F2812

hello

I want to convert TMS320f2812 based 500usec delay using Event manager  into TMS320f2808 based ePWM module.

TMS320F2808 does not support event manager module so I have createted 500usec delay using PWM, time base module.

So below 2812 code is converted into 2808 code. Please confirm my code is correct.

// EV initialization Setup 500us timer for 2812

main.c

      EvaRegs.T1PR = 586;                 // 1/(150Mhz/128) * 586 = 500us

      EvaRegs.T1CON.bit.FREE = 0;

      EvaRegs.T1CON.bit.SOFT = 0;

      EvaRegs.T1CON.bit.TMODE = 2; // Direction Up

      EvaRegs.T1CON.bit.TPS = 7;  // Internal CLK / 128

      EvaRegs.T1CON.bit.TENABLE = 0; // Enable only when needed

      EvaRegs.T1CON.bit.TCLKS10 = 0;

      EvaRegs.T1CON.bit.TCLD10 = 2; // Reload immediately

      EvaRegs.T1CON.bit.TECMPR = 0;

      EvaRegs.GPTCONA.bit.T2TOADC = 0;s

      EvaRegs.GPTCONA.bit.T1TOADC = 0;

      EvaRegs.GPTCONA.bit.TCMPOE = 0;

//delay function using EV module

void Delay_500usec(void)

{

    EvaRegs.T1CNT = 0; // Initialize counter

    EvaRegs.EVAIFRA.bit.T1PINT = 1; // Clear periodic interrupt bit

    EvaRegs.T1CON.bit.TENABLE = 1; // Enable timer

 

    while(!EvaRegs.EVAIFRA.bit.T1PINT)

    { \\500usec delay

    }

}

//_________________________________2808 code for review______________________

main.c

// ePWM timebase module initialization Setup for 500us timer

 

EPwm1Regs.TBPRD =391; //Not sure

      EPwm1Regs.TBCTL.bit.CLKDIV= 7; // Not sure

      EPwm1Regs.TBCTL.bit.FREE_SOFT =0;

      EPwm1Regs.TBCTL.bit.HSPCLKDIV =0; // Not sure

      EPwm1Regs.TBCTL.bit.CTRMODE =2;

      EPwm1Regs.TBCTL.bit.PHSDIR =1; //TB_UP

      EPwm1Regs.TBCTL.bit.PRDLD = 1; //TB_IMMEDIATE

      EPwm1Regs.TBCTL.bit.PHSEN =0; //TB_DISABLE

 

//delay function using ePWM module

void Delay_500usec(void)

{     EPwm1Regs.TBCTR =0;

      EPwm1Regs.ETFLG.bit.INT = 0;

      EPwm1Regs.ETSEL.bit.INTSEL = 2;

      EPwm1Regs.ETSEL.bit.INTEN = 1; //Enable interrupt

      EPwm1Regs.TBCTL.bit.PHSEN = 1; //TB_Enable

      EPwm1Regs.ETPS.bit.INTPRD = 1; //// Generate INT on 1st event

    while(!EPwm1Regs.ETFLG.bit.INT)

    {       \\500usec delay

    }

}

//------------code end -------------

So to generate 500usec delay what will be value for TBPRD,HSPCLKDIV and CLKDIV.

Please note that 2808 clkout is 100 Mhz

                           2812 clkout was 150 Mhz

Please replyu its urgent,

Thanks

Newbee