#include "../main/SystemInclude.h" /* 采样流程说明: 1.设置:SetSampleSiagnlForADC 2.开始:StartADC0SampingData StartADC1SampingData StartADCSyncSampingData 3.读取:IRQ ReadSamplingData 4.计算:ComputeSampleData */ __Samp_Buf_TypeDef sampleData; void ADC0_IRQHandler(void) { if(LHL_ADC_GetPending(ADC_0, ADC_FLAG_RDY) == SET) { if(sampleData.SkipSampNum) sampleData.SkipSampNum -- ; ReadSamplingData(); //读取采样数据 } } void ConversionTimerIRQ_Callback(void) { if(sampleData.SkipSampNum) sampleData.SkipSampNum -- ; ReadSamplingData(); //读取采样数据 } void SetSampleSiagnlForADC(ADC_Config_TypeDef adc_cfg) { sampleData.adcConfig.Gain0 = adc_cfg.Gain0; sampleData.adcConfig.PChan0 = adc_cfg.PChan0; sampleData.adcConfig.NChan0 = adc_cfg.NChan0; sampleData.adcConfig.Gain1 = adc_cfg.Gain1; sampleData.adcConfig.PChan1 = adc_cfg.PChan1; sampleData.adcConfig.NChan1 = adc_cfg.NChan1; sampleData.adcConfig.SPS = adc_cfg.SPS; } //开始转换控制--------------------------------------------------------------- void StartADC0SampingData(void) { sampleData.ADCBuffer[0]=0; sampleData.Counter=0; sampleData.SkipSampNum = 3 ; ADC0_Conversion_Init(sampleData.adcConfig); } void StartADC1SampingData(void) { sampleData.ADCBuffer[1]=0; sampleData.Counter=0; sampleData.SkipSampNum = 3 ; ADC1_Conversion_Init(sampleData.adcConfig); } void StartADCSyncSampingData(void) { sampleData.ADCBuffer[0]=0; sampleData.ADCBuffer[1]=0; sampleData.Counter=0; sampleData.SkipSampNum = 3 ; #if 1 ADC0_1_SyncConversion_Init(sampleData.adcConfig); #else NVIC_DisableIRQ(ADC0_IRQn); StartConversionTimerInterval(1);//1ms 定时器中断读取adc转换数据 Timer_register_irq_callback(ConversionTimer,ConversionTimerIRQ_Callback );//注册timer2中断回调函数 #endif } void ReadSamplingData(void)//ADC中断读取采样数据 BPS { sampleData.ADCBuffer[0] += ADC_ReadSampleData(ADC_0); //多重采样累计 sampleData.ADCBuffer[1] += ADC_ReadSampleData(ADC_1); //多重采样累计 sampleData.Counter++; // 采样次数自增后判断是否采样结束 // if(sampleData.Counter < sampleData.CounterMax) return; } void ComputeSampleData(void) //计算样本数据 { StopADCConversion(ADC_0); StopADCConversion(ADC_1); if(sampleData.Counter != 0)//采集数量超过设置求平均 { sampleData.ADCBuffer[0] /= (u32)sampleData.Counter; sampleData.ADCBuffer[1] /= (u32)sampleData.Counter; } }