Files
CHJ/user/Protocol/SampProcess.c
2026-03-20 21:19:04 +08:00

91 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}
}