Other Parts Discussed in Thread: CONTROLSUITE
Tool/software: Code Composer Studio
I am trying to use ADCINA0 for sensing position through potentiometer. I am using this code but am not getting some random number in ADCRESULT0 Register which remains constant even after sliding the pot. All the external functions used are the ones which were there in Examples folder of F2802x in controlsuite. Code which i am using is in the attached file. It will be helpful if anyone could point out the mistake which i am making and steps to rectify it.
/*
* ADC.c
*
* Created on: 27-Mar-2018
* Author: Nishant Sharma
*/
#include "DSP28x_Project.h" // DSP28x Headerfile
#include "F2802x_Device.h"
#define ADC_usDELAY 1000L
extern void InitAdc(void);
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitPeripheralClocks(void);
extern void InitGpio(void);
extern void DisableDog(void);
extern void InitFlash(void);
extern void AdcOffsetSelfCal(void);
Uint16 ConvertADC(void);
void main()
{
Uint16 ACQPS_Value;
Uint32 Value;
DisableDog();
InitFlash();
InitSysCtrl(); // Basic Core Init from DSP2833x_SysCtrl.c
InitGpio();
InitPieCtrl(); // basic setup of PIE table; from DSP2833x_PieCtrl.c
InitPieVectTable(); // default ISR's in PIE
InitAdc();
//AdcOffsetSelfCal();
AdcRegs.ADCSOC0CTL.bit.CHSEL= 0;
ACQPS_Value = 7;
EALLOW;
AdcRegs.SOCPRICTL.bit.SOCPRIORITY=01;
EDIS;
AdcRegs.ADCSOC0CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL= 00;
AdcRegs.INTSEL1N2.bit.INT1E = 1;
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINTs trigger at end of conversion
AdcRegs.INTSEL1N2.bit.INT1SEL = 0; //EOC0 triggers ADCINT1
AdcRegs.ADCINTSOCSEL1.all = 00;
AdcRegs.ADCINTSOCSEL2.all = 00;
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
while(1)
{
Value=ConvertADC();
}
AdcRegs.INTSEL1N2.bit.INT1E = 0;
}
Uint16 ConvertADC(void)
{
Uint32 Value;
AdcRegs.ADCSOCFRC1.bit.SOC0 = 1; // Force Start SOC0
while (AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){}
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Must clear ADCINT1 flag since INT1CONT = 0
Value= AdcResult.ADCRESULT0;
return Value; //return the value
}//end AdcConversion
/*
* ADC.c
*
* Created on: 27-Mar-2018
* Author: Nishant Sharma
*/
#include "DSP28x_Project.h" // DSP28x Headerfile
#include "F2802x_Device.h"
#define ADC_usDELAY 1000L
extern void InitAdc(void);
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitPeripheralClocks(void);
extern void InitGpio(void);
extern void DisableDog(void);
extern void InitFlash(void);
extern void AdcOffsetSelfCal(void);
Uint16 ConvertADC(void);
void main()
{
Uint16 ACQPS_Value;
Uint32 Value;
DisableDog();
InitFlash();
InitSysCtrl(); // Basic Core Init from DSP2833x_SysCtrl.c
InitGpio();
InitPieCtrl(); // basic setup of PIE table; from DSP2833x_PieCtrl.c
InitPieVectTable(); // default ISR's in PIE
InitAdc();
//AdcOffsetSelfCal();
AdcRegs.ADCSOC0CTL.bit.CHSEL= 0;
ACQPS_Value = 7;
EALLOW;
AdcRegs.SOCPRICTL.bit.SOCPRIORITY=01;
EDIS;
AdcRegs.ADCSOC0CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL= 00;
AdcRegs.INTSEL1N2.bit.INT1E = 1;
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINTs trigger at end of conversion
AdcRegs.INTSEL1N2.bit.INT1SEL = 0; //EOC0 triggers ADCINT1
AdcRegs.ADCINTSOCSEL1.all = 00;
AdcRegs.ADCINTSOCSEL2.all = 00;
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
while(1)
{
Value=ConvertADC();
}
AdcRegs.INTSEL1N2.bit.INT1E = 0;
}
Uint16 ConvertADC(void)
{
Uint32 Value;
AdcRegs.ADCSOCFRC1.bit.SOC0 = 1; // Force Start SOC0
while (AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){}
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Must clear ADCINT1 flag since INT1CONT = 0
Value= AdcResult.ADCRESULT0;
return Value; //return the value
}//end AdcConversion