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 ?