主题中讨论的其他器件:TMS320F28379D
工具与软件:
大家好、我是 eunjin。
我当前正在尝试激活 TMS320F28379D 控制卡上的 ADC。 在系统中使用它之前、我要检查 ADC 寄存器是否已正确分配、但发生了错误。
我打算使用 ADCA0~5 ADCB0~5、其中 SOC0被分配给 ADCA0、SOC1被分配给 ADCA1、...依顺序依此类推。
相关代码的设置如下
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;
}
正如预期的那样、当 向 ADCA0引脚施加3.3V 电压时、RESULT0寄存器应输出4095、而 当 向 ADCA0引脚施加0V 电压时、结果0应产生0。
但是、将 3.3V 施加到 ADCA0会更改 RESULT1和 RESULT2寄存器中的值 (在这个情况下、引脚 ADCA1至 ADCA5被连接至 GND。)
此外、当向 ADCA1施加3.3V 电压(将 ADCA0和 ADCA 2至5 连接至 GND)时、RESULT1寄存器的值没有变化。
我已正确分配引脚、将 SW2:基准电压设置为0–3.3V、 但我仍然遇到结果寄存器值的意外变化以及 ADCB 中的同样问题。

寄存器1和2更改

和 adcA1 3.3V (黄线)(adc0、2~5:0V)-->全部结果0

总之、当向 ADC 引脚施加电压时、结果值不会改变、或者不同的结果寄存器的结果也会改变
提前感谢。
此致、恩津