//******************************************************************** // Ver 1.0 // 2021.11.09 1、新建文件。 //******************************************************************** #include "config.h" ADC_Str ADC_Info; const adc_channel_t ADC_CH_Tab[ADC_CHx_MAX] = { //ADC_CHANNEL_0, //ADC_CHANNEL_1, //ADC_CHANNEL_2, //ADC_CHANNEL_3, //ADC_CHANNEL_4, //ADC_CHANNEL_5, //ADC_CHANNEL_6, //ADC_CHANNEL_7, //ADC_CHANNEL_8, //ADC_CHANNEL_9, //ADC_CHANNEL_10, //ADC_CHANNEL_11, //ADC_CHANNEL_12, //ADC_CHANNEL_13, //ADC_CHANNEL_14, //ADC_CHANNEL_15, //ADC_CHANNEL_16, #if (__VER_HW__ != 1) ADC_CHANNEL_17, ADC_CHANNEL_18, ADC_CHANNEL_19, #endif //ADC_CHANNEL_20, //ADC_CHANNEL_21, //ADC_CHANNEL_22, //ADC_CHANNEL_23, //ADC_CHANNEL_24, //ADC_CHANNEL_25, //ADC_CHANNEL_26, //ADC_CHANNEL_27, //ADC_CHANNEL_28, //ADC_CHANNEL_29, //ADC_CHANNEL_30, //ADC_CHANNEL_31, //ADC_CHANNEL_32, ADC_CHANNEL_33, //ADC_CHANNEL_34, //ADC_CHANNEL_35, //ADC_CHANNEL_36, //ADC_CHANNEL_PGA0, //ADC_CHANNEL_PGA1, //ADC_CHANNEL_OFF, //ADC_TEMPERSENSOR0, //ADC_INTERREFVOLT, }; //ADC初始化 void ADC_Init(void) { ADC_InfoInit(); ADC_GpioInit(); ADC_Init1(); ADC_ConfigSglChannel(ADC_CH_Tab[ADC_CHx]); ADC_Sgl(ENABLE); } //ADC转换 void ADC_Conversion(void) { if(ADC_FLAG_START == 0) //切换通道后,等待一个周期,再开始转换 { ADC_FLAG_START = 1; ADC_Sgl(ENABLE); } else if(ADC_PollSglBusyState() == TRUE) { ADC_Info.Ain[ADC_CHx].ADCR = ADC_GetSglResult(); ADC_Info.Ain[ADC_CHx].Resualt += ADC_Info.Ain[ADC_CHx].ADCR; if(ADC_Info.Ain[ADC_CHx].ADCR > ADC_Info.Ain[ADC_CHx].Max) { ADC_Info.Ain[ADC_CHx].Max = ADC_Info.Ain[ADC_CHx].ADCR; } if(ADC_Info.Ain[ADC_CHx].ADCR < ADC_Info.Ain[ADC_CHx].Min) { ADC_Info.Ain[ADC_CHx].Min = ADC_Info.Ain[ADC_CHx].ADCR; } if(ADC_CNT == (ADC_CNT_MAX + 2)) { ADC_Info.Ain[ADC_CHx].Value = (ADC_Info.Ain[ADC_CHx].Resualt - ADC_Info.Ain[ADC_CHx].Max - ADC_Info.Ain[ADC_CHx].Min) / ADC_CNT_MAX; ADC_Info.Ain[ADC_CHx].Max = 0x00; ADC_Info.Ain[ADC_CHx].Min = 0xfff; ADC_Info.Ain[ADC_CHx].Resualt = 0; if(ADC_CHx == (ADC_CHx_MAX - 1)) { ADC_CNT = 0; ADC_FLAG_OK = 1; } } ADC_CHx++; if(ADC_CHx == ADC_CHx_MAX) { ADC_CHx = 0; ADC_CNT++; } ADC_ClrSglIrqState(); //设置到下一个转换通道 ADC_ConfigSglChannel(ADC_CH_Tab[ADC_CHx]); //ADC_StartOfConversion(ADC1); } else { ADC_OTCNT++; if(ADC_OTCNT > 2) { ADC_OTCNT = 0; ADC_FLAG_START = 0; } } } //ADC单通道转换 void ADC_ChannelConversion(INT8U ch) { ADC_ConfigSglChannel(ADC_CH_Tab[ch]); //设置到转换通道 DELAY_Us(100); ADC_ClrSglIrqState(); ADC_Sgl(ENABLE); while(ADC_PollSglBusyState() == FALSE); ADC_Info.Ain[ch].Value = ADC_GetSglResult(); } INT32S ADC_ReadVolt(INT16U Ch) { INT32S tVoltage; tVoltage = ADC_Info.Ain[Ch].Value; tVoltage = (tVoltage * ADC_VREF) >> 12; return(tVoltage); }