Other Parts Discussed in Thread: C2000WARE
Tool/software:
I am trying to convert single channel of ADC (ADCA2). I have generated unipolar sine wave using using EPWM3 ISR. and Bring it out using DAC and use the same as the input to ADC. EPWM3 is also used as a SOC0 for ADC channel 2. Now when i try to debug to verify whether AdcResult0 reads correct value or not, the debugger jumps to Illegal ISR.
I have used below mentioned code.
#include "F28x_Project.h"
#define PI 3.1459265358979323846
void Gpio_select(void);
void Setup_epwm(void);
void ConfigureAdc(void);
void SetupADCSoftware(void);
void Initdaca(void);
void Initdaca(void);
extern interrupt void epwm3_isr(void);
float Ma1;
float theta;
Uint16 ADCaResult0;
int i;
void main(void)
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
Gpio_select();
Setup_epwm();
ConfigureAdc();
SetupADCSoftware();
EALLOW;
PieVectTable.EPWM3_INT = &epwm3_isr;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
EINT;
ERTM;
while(1)
{
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;
EDIS;
}
void Setup_epwm(void)
{
EPwm3Regs.TBCTL.bit.CLKDIV = 0;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm3Regs.TBCTL.bit.CTRMODE = 2;
EPwm3Regs.TBPRD = 5000;
EPwm3Regs.AQCTLA.all = 0x0090;
EPwm3Regs.CMPA.bit.CMPA = 2500;
EPwm3Regs.ETSEL.bit.SOCAEN = 1;
EPwm3Regs.ETSEL.bit.SOCASEL = 3;
EPwm3Regs.ETPS.bit.SOCAPRD = 1;
EPwm3Regs.ETCLR.bit.SOCA = 1;
EPwm3Regs.ETSEL.bit.INTEN = 1;
EPwm3Regs.ETSEL.bit.INTSEL = 3;
EPwm3Regs.ETPS.bit.INTPRD = 1;
EPwm3Regs.ETCLR.bit.INT = 1;
}
void Initdaca(void)
{
EALLOW;
DacaRegs.DACCTL.bit.DACREFSEL = 1;
DacaRegs.DACCTL.bit.LOADMODE = 0;
DacaRegs.DACOUTEN.bit.DACOUTEN = 1;
DELAY_US(10);
EDIS;
}
void InitdacB(void)
{
EALLOW;
DacbRegs.DACCTL.bit.DACREFSEL = 1;
DacbRegs.DACCTL.bit.LOADMODE = 0;
DacbRegs.DACOUTEN.bit.DACOUTEN = 1;
DELAY_US(10);
EDIS;
}
void ConfigureAdc(void)
{
EALLOW;
AdcaRegs.ADCCTL2.bit.PRESCALE = 6;
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
EDIS;
DELAY_US(1000);
}
void SetupADCSoftware(void)
{
Uint16 acqps;
if(ADC_RESOLUTION_12BIT == AdcaRegs.ADCCTL2.bit.RESOLUTION)
{
acqps = 14;
}
else
{
acqps = 63;
}
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 9;
EDIS;
}
extern interrupt void epwm3_isr(void)
{
i++;
theta = theta + (2.0*PI*1*50*5e-5);
Ma1 = 0.5 + (0.5*1*__sin(theta));
DacaRegs.DACVALS.bit.DACVALS = Ma1*4096;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
EPwm3Regs.ETCLR.bit.INT = 1;
}