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.
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;
}
The issue has been resolved. Actually I made a silly mistake. and it is rectified by referring eCAP lab of C2000 lab. Thank you.