您好!
Sysclk = 50 MHz used, Vref = 3 V
//-------------------------------------------ADC configuration:-------------------------------------------------------------------
EALLOW;
AdcaRegs.ADCCTL2.bit.PRESCALE = 1
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
DELAY_US(1000);
EDIS;
acqps = 30;
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC1CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC2CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC3CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC4CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC4CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC5CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC5CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC6CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC6CTL.bit.ACQPS = acqps;
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 6;
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
EDIS;
//--------------------------------------------------------------------------------------------------------------
Uint16 adc_count = 0, main_count=0;
Main for(;;) loop:
{
// when ADC voltage > 1 V at ADC pin is given, below condition executed once using flag variable:
{
main_count = 0;
GpioDataRegs.GPCSET.bit.GPIO67 = 1;
}
main_count++;
ADC_read();
if(adc_count > 1100)
{
GpioDataRegs.GPCCLEAR.bit.GPIO67 = 1;
// Observed main_count using breakpoint; value found to be 29
}
}
Uint16 ADC_read()
{
EALLOW;
AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x01;
EDIS;
AdcaRegs.ADCSOCFRC1.all = 0x007F;
DELAY_US(10);
if(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 1)
{
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
adc_count = ADC_Result();
}
}
Uint16 ADC_Result()
{
// average of ADCa result 0 to 6
}
//------ 问题----
1:当 ADC 电压从0变为3V 时、引脚切换需要800us (导通至关断脉冲持续时间)。 为什么需要这么多时间以及如何减少这种情况。
ADC_READ() 在观察 ADC 结果与给定电压匹配之前执行两次。 为什么存在延迟? 首次事件时未获取 ADC 结果的原因。
请提供指导