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.

TMS320F28035 ePWM interrupt jitter or something else

Other Parts Discussed in Thread: TMS320F28035

Hello

I found a strange problem with interrupt from ePWM in TMS320F28035. This is my PWM config:

    EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE;            // Set Immediate load
    EPwm1Regs.TBPRD = 300;
    EPwm1Regs.TBPHS.half.TBPHS = 0;
    EPwm1Regs.TBCTR = 0;

    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_CMPB;       
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    // Counter compare submodule registers
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_IMMEDIATE;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_IMMEDIATE;     
    EPwm1Regs.CMPA.half.CMPA = 300-68;                
    EPwm1Regs.CMPB = 300;

    // Action Qualifier SubModule Registers
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
    EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
       
    // DeadBand Control Register
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;
    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRDZERO;
    EPwm1Regs.ETSEL.bit.INTEN = 1;                // Enable INT
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;            // Generate INT every event

And this is my ISR:

_ISR_Run:
        MOVW    DP,#0x01BF
          OR    @3,#0x0100    ; set GPIO 24 to high
        CONTEXT_SAVE
        MOVW    DP,#0x01BF
         OR        @5,#0x0100  ; set GPIO 24 to low

          ....

some_code

....

 CONTEXT_REST

IRET

No other interrupts. CLA not used.

The oscilloscope is connected to PWM1A (GPIO0) and GPIO24 pins.... I see delay (300ns) and (!) jitter(100ns) between this two signals. Can anybody explain this ? There is really big delay and jitter between event and interrupt in MCU ?

 

  • Hi Andrey,

    From the EPWM code settings you mentioned above it seems like you are taking 2 interrupts for every PWM cycle (on counter zero and period event).
    And the PWM is set on zero and cleared on period events.

        // Action Qualifier SubModule Registers
        EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
        EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;      
        EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRDZERO;

    If i understand correctly - GPIO24 is toggled twice per 1 PWM cycle. So, how are you triggering the scope - is it based of GPIO0 or 24?

    -Bharathi