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.

CAPTURE peripheral issue...

Dear all,

 

        While trying to sense the hall sensor signal in ecap1 module for speed measurement i could not get values in the capture register for the following code. Correct me in the code specifically at interrupt handling.

 

#include"DSP2803x_Device.h"
extern void InitSysCtrl();
extern void InitPieCtrl();
extern void InitPieVectTable();
interrupt void ecap1_isr();
void gpiosetup();
void ecapsetup();
unsigned int TSt1,TSt2,TSt3,TSt4,DutyOnTime1,DutyOffTime1,Period1,Period2,DutyOnTime2,DutyOffTime2;
void main()
{
InitSysCtrl();

gpiosetup();

DINT;
InitPieCtrl();

IER=0x0000;
IFR=0x0000;

InitPieVectTable();

EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.ECAP1_INT = &ecap1_isr;
EDIS;
ecapsetup();

IER |= M_INT4;
PieCtrlRegs.PIEIER4.bit.INTx1 = 1;

EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;

}
void gpiosetup()
{
GpioCtrlRegs.GPAPUD.bit.GPIO19=1;
GpioCtrlRegs.GPADIR.bit.GPIO19=0;
GpioCtrlRegs.GPAMUX2.bit.GPIO19=3;
//GpioCtrlRegs.GPAPUD.bit.GPIO24=1;
}

void ecapsetup()
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
ECap1Regs.ECEINT.all = 0x0000; // Disable all capture interrupts
ECap1Regs.ECCLR.all = 0xFFFF;
ECap1Regs.ECCTL1.bit.CAPLDEN = 0;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;

ECap1Regs.ECCTL2.bit.CAP_APWM = 0;
ECap1Regs.ECCTL1.bit.CAP1POL = 0;
ECap1Regs.ECCTL1.bit.CAP2POL = 1;
ECap1Regs.ECCTL1.bit.CAP3POL = 0;
ECap1Regs.ECCTL1.bit.CAP4POL = 1;
ECap1Regs.ECCTL1.bit.CTRRST1 = 1;
ECap1Regs.ECCTL1.bit.CTRRST2 = 1;
ECap1Regs.ECCTL1.bit.CTRRST3 = 1;
ECap1Regs.ECCTL1.bit.CTRRST4 = 1;
ECap1Regs.ECCTL1.bit.CAPLDEN = 1;
ECap1Regs.ECCTL1.bit.PRESCALE = 0;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 2;
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // Allow TSCTR to run

ECap1Regs.ECEINT.bit.CEVT1 = 1; // 4 events = interrupt
ECap1Regs.ECFLG.bit.CEVT1=1;
ECap1Regs.ECFLG.bit.INT=1;
}

// Run Time ( e.g. CEVT1 triggered ISR call)
//==========================================
// Note: here Time-stamp directly represents the Duty cycle values.
interrupt void ecap1_isr()
{

DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
DutyOffTime1 = ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1
Period1 = DutyOnTime1 + DutyOffTime1;
Period2 = DutyOnTime2 + DutyOffTime2;
ECap1Regs.ECCLR.bit.CEVT1 = 1;
ECap1Regs.ECCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}

 

Thanks in advance.

Regards,

Saravanakumar...