#include "adc.h" #include "ctrl.h" //ADC0 充电电流 //ADC1 电池电压 //ADC2 温感 //ADC3 烟感 //ADC4 主电检测 //为6个通道 unsigned int AD_Value[M]; //用来存放ADC转换结果,也是DMA的目标地址 void Init_Power_Check(void) { /* Init GPIO for ADC2 */ GPIO_Init(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3| GPIO_PIN_4|GPIO_PIN_5, GPIO_MODE_IN_FL_NO_IT); ADC1_DeInit(); ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE); ADC1_ITConfig(ADC1_IT_EOCIE,ENABLE); ADC1_StartConversion(); } unsigned char gcChannel = 0; unsigned char cvtCnt = 0; #ifdef _COSMIC_ @far @interrupt void ADC1_IRQHandler(void) #else // _RAISONANCE_ void ADC1_IRQHandler(void) interrupt 22 #endif // _COSMIC_ { int Conversion_Value; /* Get converted value */ Conversion_Value = ADC1_GetConversionValue(); ADC1_ClearITPendingBit(ADC1_IT_EOC); if(cvtCnt>4) { cvtCnt = 0; AD_Value[gcChannel] = Conversion_Value; //切换转换通道 gcChannel++; gcChannel = gcChannel%M; ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, gcChannel, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE); } ADC1_StartConversion(); cvtCnt++; }