Other Parts Discussed in Thread: TMS320F28379D
Tool/software:
Hi, I'm eunjin.
I'm currently trying to activate the ADC on the TMS320F28379D control card. Before using it in the system, I'm checking if the ADC registers have been correctly assigned, but an error has occurred.
I intend to use ADCA0~5 ADCB0~5 with SOC0 assigned to ADCA0, SOC1 to ADCA1,....and so on in sequential order.
The relevant code is set up as follows
void setupADC(void)
{
//single ended
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
EALLOW;
//ADCA
AdcaRegs.ADCCTL2.bit.PRESCALE = 0;
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//ADCB
AdcbRegs.ADCCTL2.bit.PRESCALE = 0;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
EDIS;
DELAY_US(1000);
}
void setupADCSOC(void)
{
EALLOW;
//ADCA
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; // SOC0(=ADCA0)
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 50;
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1; // SOC1(=ADCA1)
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 50;
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
//
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2; // SOC2(=ADCA2)
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 50;
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3; // SOC3(=ADCA3)
AdcaRegs.ADCSOC3CTL.bit.ACQPS = 50;
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4; // SOC4(=ADCA4)
AdcaRegs.ADCSOC4CTL.bit.ACQPS = 50;
AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcaRegs.ADCSOC5CTL.bit.CHSEL = 5; // SOC5(=ADCA5)
AdcaRegs.ADCSOC5CTL.bit.ACQPS = 50;
AdcaRegs.ADCSOC5CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
// AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; // End of SOC5 will set INT1 flag
// AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; // Enable INT1 flag
// AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // Make sure INT1 flag is cleared
//ADCB
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; // SOC0(=ADCB0)
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 50;
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; // SOC1(=ADCB1)
AdcbRegs.ADCSOC1CTL.bit.ACQPS = 50;
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2; // SOC2(=ADCB2)
AdcbRegs.ADCSOC2CTL.bit.ACQPS = 50;
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcbRegs.ADCSOC3CTL.bit.CHSEL = 3; // SOC3(=ADCB3)
AdcbRegs.ADCSOC3CTL.bit.ACQPS = 50;
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcbRegs.ADCSOC4CTL.bit.CHSEL = 4; // SOC4(=ADCB4)
AdcbRegs.ADCSOC4CTL.bit.ACQPS = 50;
AdcbRegs.ADCSOC4CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
AdcbRegs.ADCSOC5CTL.bit.CHSEL = 5; // SOC5(=ADCB5)
AdcbRegs.ADCSOC5CTL.bit.ACQPS = 50;
AdcbRegs.ADCSOC5CTL.bit.TRIGSEL = 1; // Trigger on CPUTIMER0
// AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 5; // End of SOC5 will set INT1 flag
//AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; // Enable INT1 flag
// AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // Make sure INT1 flag is cleared
EDIS;
}
As intended, when 3.3V is applied to the ADCA0 pin, the RESULT0 register should output 4095, and when 0V is applied to the ADCA0 pin, result 0 should result in 0.
However, applying 3.3V to ADCA0 changes the values in the RESULT1 and RESULT2 registers (In this case, pins ADCA1 through ADCA5 are connected to GND.)
Additionally, when 3.3V is applied to ADCA1 (with ADCA0 and ADCA 2 through 5 are connected to GND), there is no change in the values of the RESULT1 register.
I have correctly assigned the pins, set the SW2 : reference voltage to 0–3.3V, but I am still experiencing unintended changes in the RESULT register values & same problem in ADCB.
<ADCA0 3.3V(blue LINE), ADCA1~5:0V>

<RESULT> register 1& 2 change
<ADCA0 0V(blue LINE), ADCA1~5:0V>

and adcA1 3.3V(YELLOW LINE) (adc0,2~5:0V)--> ALL RESULT 0

To summarize, when voltage is applied to the ADC PIN, the RESULT value does not change, or a different result register’s result changes
Thanks in advance.
Regards, eunjin