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.

CCS/TMS320F28069F: Please Check the Code For ADC ISR

Part Number: TMS320F28069F


Tool/software: Code Composer Studio

Hi,

My English is not good, please understanding.

My example code below,

I want to check the delay from ePWM1A_SOCA to ADC_interrupt after conversion.

I think, from this code, EOC for adc_isr interrupt is EOC15, so i set the register AdcRegs.INTSEL1N2.bit.INT1SEL = 15;

I think, if i set 16kHz pwm frequency then, the interrupt frequency must be 16kHz 

But i check the value of pulse (when start adc_isr a = 1; a = 0  makes a pulse) by scope, 

When i set the INT1SEL = 7, the pulse is 16kHz, but i set the INT1SEL = 15, the pulse is 150kHz.

In Simultaneously mode, the conversion of ADCINA7 and ADCINB7 is done, only EOC7 occur? or my code is wrong?

If only EOC7 occur, EOC15 is always 1?

I'm waiting for your answer.

thank you.

//My Example Code//

// Included Files
//
#include "DSP28x_Project.h"

//
// Function Prototypes
//
__interrupt void adc_isr(void);
void Adc_Config(void);

//
// Globals
//
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage0;
Uint16 Voltage1;
Uint16 Voltage2;
Uint16 Voltage3;
Uint16 Voltage4;
Uint16 Voltage5;
Uint16 Voltage6;
Uint16 Voltage7;
Uint16 Voltage8;
Uint16 Voltage9;
Uint16 Voltage10;
Uint16 Voltage11;
Uint16 Voltage12;
Uint16 Voltage13;
Uint16 Voltage14;
Uint16 Voltage15;
Uint16 a;

//
// Main
// 
void main(void)
{
 DINT;
 IER = 0x0000;
    IFR = 0x0000;
 
    InitSysCtrl();

    InitPieCtrl();
    InitPieVectTable();

    EALLOW;
    PieVectTable.ADCINT1 = &adc_isr;
    EDIS;
 
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
    IER |= M_INT1;

    InitAdc();
    AdcOffsetSelfCal();
 Adc_Config();

    LoopCount = 0;
    ConversionCount = 0;

 EINT;
    ERTM;

    for(;;)
    {
        LoopCount++;
    }
}

//
// Functions
//
__interrupt void adc_isr(void)
{

a = 1;

a = 0;


    Voltage0 = AdcResult.ADCRESULT0;
    Voltage1 = AdcResult.ADCRESULT1;
    Voltage2 = AdcResult.ADCRESULT2;
    Voltage3 = AdcResult.ADCRESULT3;
    Voltage4 = AdcResult.ADCRESULT4;
    Voltage5 = AdcResult.ADCRESULT5;
    Voltage6 = AdcResult.ADCRESULT6;
    Voltage7 = AdcResult.ADCRESULT7;
    Voltage8 = AdcResult.ADCRESULT8;
    Voltage9 = AdcResult.ADCRESULT9;
    Voltage10 = AdcResult.ADCRESULT10;
    Voltage11 = AdcResult.ADCRESULT11;
    Voltage12 = AdcResult.ADCRESULT12;
    Voltage13 = AdcResult.ADCRESULT13;
    Voltage14 = AdcResult.ADCRESULT14;
    Voltage15 = AdcResult.ADCRESULT15;
    
    ConversionCount++;

    AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;
}

void Adc_Config(void)
{
 EALLOW;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;
    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdcRegs.INTSEL1N2.bit.INT1E = 1;
    AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
    AdcRegs.INTSEL1N2.bit.INT1SEL = 15;
    
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
    AdcRegs.ADCSOC2CTL.bit.CHSEL = 1;
    AdcRegs.ADCSOC4CTL.bit.CHSEL = 2;
    AdcRegs.ADCSOC6CTL.bit.CHSEL = 3;
    AdcRegs.ADCSOC8CTL.bit.CHSEL = 4;
    AdcRegs.ADCSOC10CTL.bit.CHSEL = 5;
    AdcRegs.ADCSOC12CTL.bit.CHSEL = 6;
    AdcRegs.ADCSOC14CTL.bit.CHSEL = 7;
    
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN2 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN4 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN6 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN8 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN10 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN12 = 1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN14 = 1;
    
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 5;
    AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 5;
    
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC3CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC4CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC5CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC6CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC7CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC8CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC9CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC10CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC11CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC12CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC13CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC14CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC15CTL.bit.ACQPS = 6;
    
    EPwm1Regs.ETSEL.bit.SOCAEN = 1;
    EPwm1Regs.ETSEL.bit.SOCASEL = 4;
    EPwm1Regs.ETPS.bit.SOCAPRD = 1;
    EPwm1Regs.CMPA.half.CMPA = 0x0080;
    EPwm1Regs.TBPRD = 0xFFFF;
    EPwm1Regs.TBCTL.bit.CTRMODE = 0;
}

  • INT1SEL = 15 should be fine. I'm not seeing anything in the code you shared that would explain the issue. If you look at the ADC registers, do you see anything off? Do you see any of the overflow bits being set?

    InGwon Jo said:

    If only EOC7 occur, EOC15 is always 1?

    I don't understand this question--can you explain in a bit more detail?

    Thanks,

    Whitney

  • InGwon Jo,

    If you are triggering your SOCs using the EPWM, you can read the value of TBCTR from your ADC ISR to know the number of EPWM-ticks that have elapsed between the original trigger and ISR execution.

    See if this helps: 


    -Tommy