91 lines
2.4 KiB
C
91 lines
2.4 KiB
C
#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;
|
||
}
|
||
}
|
||
|