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.

TMS320F28379D: Measurement of frequency of PWM signal using eCAP module

Part Number: TMS320F28379D

Tool/software:

I am practicing frequency measurement using eCAP module of TMS320F28379D. for that purpose i have generated PWM signal with frequency and duty of 1 kHz and 0.5 respectively using EPWM1A and I fed the same signal to eCAP1. GPIO 5 is configured as a eCAP1 using input xbar. but while debugging it shows wrong values of frequency, even i changed the frequency of PWM signal generated by EPWM1. The code throws same value of frequency in debug mode. Please help to solve this issue.

#include "F28x_Project.h"
void Gpio_select(void);
void Setup_ePWM(void);
void setup_ecap(void);
extern interrupt void ecap1_isr(void);
int i=0;
float PWM_ON_PERIOD;
float PWM_PERIOD;
float frequency;

void main(void)
{
InitSysCtrl();
InitECap1Gpio(0x5);
DINT;
Gpio_select();
Setup_ePWM();
setup_ecap();

InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();

EALLOW;
PieVectTable.ECAP1_INT = &ecap1_isr;
EDIS;

IER |= M_INT4;
PieCtrlRegs.PIEIER4.bit.INTx1 = 1;
EINT;
ERTM;
while(1)
{

}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;
EDIS;
EALLOW;
InputXbarRegs.INPUT7SELECT = 0x5; // Set eCAP1 source to GPIO-pin
EDIS;
}
void Setup_ePWM(void)
{
EPwm1Regs.TBCTL.bit.CLKDIV = 1;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
EPwm1Regs.TBCTL.bit.CTRMODE = 0;
EPwm1Regs.TBPRD = 25000;
EPwm1Regs.AQCTLA.all = 0x0012;
EPwm1Regs.AQCTLB.all = 0x0021;
EPwm1Regs.CMPA.bit.CMPA = 12500;
}
void setup_ecap(void)
{
ECap1Regs.ECEINT.all = 0;
ECap1Regs.ECCTL1.bit.CAPLDEN = 0;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;
ECap1Regs.TSCTR = 0;
ECap1Regs.CTRPHS = 0;
ECap1Regs.ECCTL1.all = 0x01C4;
ECap1Regs.ECCTL2.all = 0x0096;
ECap1Regs.ECEINT.all = 0x0008;
}

extern interrupt void ecap1_isr(void)
{
ECap1Regs.ECCLR.bit.INT = 1;
ECap1Regs.ECCLR.bit.CEVT3 = 1;

PWM_ON_PERIOD = ECap1Regs.CAP2 - ECap1Regs.CAP1;
PWM_PERIOD = ECap1Regs.CAP3 - ECap1Regs.CAP1;

frequency = 1/PWM_PERIOD;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}