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.

为什么我采用内部ADC的差分输入模式,都接在一个GND引脚时却得到的不是2048而是1615啊



我用的板子是TM4C123GXL,    CCS6.0的版本,换了几个差分输入都没用,得到的数据如图

void ADC_D_INIT()
{
	SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
	ADCHardwareOversampleConfigure(ADC0_BASE, 64);

	GPIOPinTypeADC(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1);
	ADCReferenceSet(ADC0_BASE, ADC_REF_INT);
	ADCSequenceDisable(ADC0_BASE, 0);                        //  配置前先禁止采样序列
	ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
	/*
	ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH7);
	ADCSequenceStepConfigure(ADC0_BASE,0,7,ADC_CTL_CH7|ADC_CTL_IE|ADC_CTL_END);*/
	ADCSequenceStepConfigure(ADC0_BASE, 0, 0,ADC_CTL_D | ADC_CTL_CH3); //差分输入,差分通道3,6和7
	ADCSequenceStepConfigure(ADC0_BASE, 0, 1,ADC_CTL_D | ADC_CTL_CH3);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 2,ADC_CTL_D | ADC_CTL_CH3);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 3,ADC_CTL_D | ADC_CTL_CH3);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 4,ADC_CTL_D | ADC_CTL_CH3);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 5,ADC_CTL_D | ADC_CTL_CH3);
	ADCSequenceStepConfigure(ADC0_BASE, 0, 6,ADC_CTL_D | ADC_CTL_CH3);
	ADCSequenceStepConfigure(ADC0_BASE,0,7,ADC_CTL_D|ADC_CTL_CH3|ADC_CTL_IE|ADC_CTL_END);

	ADCSequenceEnable(ADC0_BASE, 0);

}

void main()
{
	SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
	ADC_D_INIT();
	TIMER0_INIT(1000,true);
	while(1)
	{

	}
}


void Timer0IntHandler()
{
	TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

	ADCIntClear(ADC0_BASE, 0);
	ADCProcessorTrigger(ADC0_BASE, 0);

	while(!ADCIntStatus(ADC0_BASE, 0, false))
	{
	}
	ADCSequenceDataGet(ADC0_BASE, 0, DATA);
}