2026-03-20 21:16:58 +08:00
|
|
|
|
#include "../main/SystemInclude.h"
|
2026-03-20 21:19:53 +08:00
|
|
|
|
#if 0
|
|
|
|
|
|
__Samp_Buf_TypeDef sampleData;
|
2026-03-20 21:16:58 +08:00
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
//ADC0<43><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
|
|
|
|
|
static void ADC0_Conversion_Init(ADC_BaseConfig_TypeDef* adc_config)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADC_Init(ADC_0, adc_config->SPS, adc_config->Gain, adc_config->PChan, adc_config->NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
|
|
|
|
|
}
|
2026-03-20 21:16:58 +08:00
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
//ADC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
|
|
|
|
|
static void ADC1_Conversion_Init(ADC_BaseConfig_TypeDef* adc_config)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADC_Init(ADC_1, adc_config->SPS, adc_config->Gain, adc_config->PChan, adc_config->NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC1 */
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ADCͬ<43><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
|
|
|
|
|
static void ADC0_1_SyncConversion_Init(ADC_SyncConfig_TypeDef* adc_config)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADC_Init(ADC_0, adc_config->SPS, adc_config->Gain0, adc_config->PChan0, adc_config->NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
|
|
|
|
|
ADC_Init(ADC_1, adc_config->SPS, adc_config->Gain1, adc_config->PChan1, adc_config->NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
|
|
|
|
|
|
ADC_SyncCmd(ENABLE);/* 4. ADCͬ<43><CDAC>ʹ<EFBFBD><CAB9> */
|
|
|
|
|
|
}
|
2026-03-20 21:16:58 +08:00
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
//<2F><>ADC<44><43><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
|
|
|
|
|
void SetSampleSiagnlForSingleADC(ADC_BaseConfig_TypeDef* adc_cfg)
|
2026-03-20 21:16:58 +08:00
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
|
ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_2P5V);
|
|
|
|
|
|
sampleData.adcBaseCfg.Gain = adc_cfg->Gain;
|
|
|
|
|
|
sampleData.adcBaseCfg.PChan = adc_cfg->PChan;
|
|
|
|
|
|
sampleData.adcBaseCfg.NChan = adc_cfg->NChan;
|
|
|
|
|
|
sampleData.adcBaseCfg.SPS = adc_cfg->SPS;
|
2026-03-20 21:16:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
//˫ADC<44><43><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
|
|
|
|
|
void SetSampleSiagnlForSyncADC( ADC_SyncConfig_TypeDef* adc_cfg)
|
2026-03-20 21:16:58 +08:00
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
|
ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_2P5V);
|
|
|
|
|
|
sampleData.adcSyncCfg.Gain0 = adc_cfg->Gain0;
|
|
|
|
|
|
sampleData.adcSyncCfg.PChan0 = adc_cfg->PChan0;
|
|
|
|
|
|
sampleData.adcSyncCfg.NChan0 = adc_cfg->NChan0;
|
|
|
|
|
|
|
|
|
|
|
|
sampleData.adcSyncCfg.Gain1 = adc_cfg->Gain1;
|
|
|
|
|
|
sampleData.adcSyncCfg.PChan1 = adc_cfg->PChan1;
|
|
|
|
|
|
sampleData.adcSyncCfg.NChan1 = adc_cfg->NChan1;
|
|
|
|
|
|
sampleData.adcSyncCfg.SPS = adc_cfg->SPS;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ADC<44>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>--------------------------------------------------
|
|
|
|
|
|
u16 GetAdcGain(u16 gianX)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(gianX)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 1: return GAIN1;
|
|
|
|
|
|
case 2: return GAIN2;
|
|
|
|
|
|
case 4: return GAIN4;
|
|
|
|
|
|
case 8: return GAIN8;
|
|
|
|
|
|
case 16: return GAIN16;
|
|
|
|
|
|
case 32: return GAIN32;
|
|
|
|
|
|
case 64: return GAIN64;
|
|
|
|
|
|
case 128: return GAIN128;
|
|
|
|
|
|
default:
|
|
|
|
|
|
return GetAdcGain(ADC_GAIN_DEFAULT);
|
|
|
|
|
|
}
|
2026-03-20 21:16:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
/* ======================================================================================================
|
|
|
|
|
|
adc<EFBFBD>жϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
1.<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SetSampleSiagnlForSingleADC SetSampleSiagnlForSyncADC
|
|
|
|
|
|
2.<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>StartADC0SampingData StartADC1SampingData StartADCSyncSampingData
|
|
|
|
|
|
3.<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>IRQ ReadSamplingData
|
|
|
|
|
|
4.<EFBFBD><EFBFBD><EFBFBD>㣺ComputeSampleData
|
|
|
|
|
|
======================================================================================================*/
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
|
void ConversionIRQ_Callback(void)
|
2026-03-20 21:16:58 +08:00
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
|
if(sampleData.SkipSampNum) {sampleData.SkipSampNum -- ; return; }
|
|
|
|
|
|
ReadSamplingData(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
void StartADC0SampingData(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.ADCBuffer[0]=0;
|
|
|
|
|
|
sampleData.Counter=0;
|
|
|
|
|
|
sampleData.SkipSampNum = 3 ;
|
2026-03-20 21:19:53 +08:00
|
|
|
|
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
|
|
|
|
|
|
ADC_register_irq_callback(ADC_0,ConversionIRQ_Callback);
|
|
|
|
|
|
StartADC(ADC_0);
|
2026-03-20 21:19:04 +08:00
|
|
|
|
}
|
2026-03-20 21:19:53 +08:00
|
|
|
|
|
2026-03-20 21:16:58 +08:00
|
|
|
|
void StartADC1SampingData(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.ADCBuffer[1]=0;
|
|
|
|
|
|
sampleData.Counter=0;
|
|
|
|
|
|
sampleData.SkipSampNum = 3 ;
|
2026-03-20 21:19:53 +08:00
|
|
|
|
ADC1_Conversion_Init(&sampleData.adcBaseCfg);
|
|
|
|
|
|
ADC_register_irq_callback(ADC_1,ConversionIRQ_Callback);
|
|
|
|
|
|
StartADC(ADC_1);
|
2026-03-20 21:16:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void StartADCSyncSampingData(void)
|
2026-03-20 21:19:53 +08:00
|
|
|
|
{
|
2026-03-20 21:16:58 +08:00
|
|
|
|
sampleData.ADCBuffer[0]=0;
|
|
|
|
|
|
sampleData.ADCBuffer[1]=0;
|
|
|
|
|
|
sampleData.Counter=0;
|
|
|
|
|
|
sampleData.SkipSampNum = 3 ;
|
2026-03-20 21:19:53 +08:00
|
|
|
|
ADC0_1_SyncConversion_Init(&sampleData.adcSyncCfg);
|
|
|
|
|
|
ADC_register_irq_callback(ADC_0,ConversionIRQ_Callback);
|
|
|
|
|
|
StartADC(ADC_0);//ֻ<>迪<EFBFBD><E8BFAA>ADC_0
|
2026-03-20 21:16:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
|
2026-03-20 21:16:58 +08:00
|
|
|
|
void ReadSamplingData(void)//ADC<44>ж϶<D0B6>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BPS
|
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
|
sampleData.ADCBuffer[0] += ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
|
|
|
|
|
sampleData.ADCBuffer[1] += ADC_ReadData(ADC_1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
|
|
|
|
|
sampleData.Counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ComputeSampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
|
StopADC(ADC_0);
|
|
|
|
|
|
StopADC(ADC_1);
|
|
|
|
|
|
if(sampleData.Counter != 0)//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
{
|
|
|
|
|
|
sampleData.ADCBuffer[0] /= (u32)sampleData.Counter;
|
|
|
|
|
|
sampleData.ADCBuffer[1] /= (u32)sampleData.Counter;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
/* ======================================================================================================
|
|
|
|
|
|
adc dma<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
1.<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD> SetSampleSiagnlForSingleADC SetSampleSiagnlForSyncADC
|
|
|
|
|
|
2.<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> StartDMAForADC0SampingData StartDMAForADC1SampingData StartDMAForADCSyncSampingData
|
|
|
|
|
|
3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IRQ <EFBFBD><EFBFBD>־λ
|
|
|
|
|
|
4.<EFBFBD><EFBFBD><EFBFBD>㣺 DMA_ComputeSampleData_ADC0 DMA_ComputeSampleData_ADC1
|
|
|
|
|
|
======================================================================================================*/
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
|
|
|
|
|
|
void DMAForADC0_Callback()
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[0] = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DMAForADC1_Callback()
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[1] = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
//<2F><>ADCת<43><D7AA>--------------------------
|
|
|
|
|
|
void StartDMAForADC0SampingData(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.SkipSampNum = 0 ;
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[1] = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
|
|
|
|
|
|
DMA_ADC_Init(ADC_0,sampleData.DMA_ADC_Buffer[0],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
|
|
|
|
|
DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForADC0_Callback);
|
|
|
|
|
|
DMA_StartADC(ADC_0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ADCת<43><D7AA>--------------------------
|
|
|
|
|
|
void StartDMAForADC1SampingData(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.SkipSampNum = 0 ;
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[1] = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
|
|
|
|
|
|
DMA_ADC_Init(ADC_1, sampleData.DMA_ADC_Buffer[1],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
|
|
|
|
|
DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForADC1_Callback);
|
|
|
|
|
|
DMA_StartADC(ADC_1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//˫ADCת<43><D7AA>--------------------------
|
|
|
|
|
|
void StartDMAForADCSyncSampingData(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
sampleData.SkipSampNum = 0 ;
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[0] = 0 ;
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[1] = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
ADC0_1_SyncConversion_Init(&sampleData.adcSyncCfg);
|
|
|
|
|
|
DMA_ADC_Init(ADC_0,sampleData.DMA_ADC_Buffer[0],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
|
|
|
|
|
DMA_ADC_Init(ADC_1,sampleData.DMA_ADC_Buffer[1],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
|
|
|
|
|
DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForADC0_Callback);
|
|
|
|
|
|
DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForADC1_Callback);
|
|
|
|
|
|
DMA_StartADC(ADC_0);
|
|
|
|
|
|
DMA_StartADC(ADC_1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>-----------------------
|
|
|
|
|
|
inline u8 WaitADC0DMAComplete(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (sampleData.DMA_ADC_adcflag[0]) {
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[0] = 0;
|
|
|
|
|
|
return 1; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0; // ת<><D7AA>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline u8 WaitADC1DMAComplete(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (sampleData.DMA_ADC_adcflag[1]) {
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[1] = 0;
|
|
|
|
|
|
return 1; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0; // ת<><D7AA>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline u8 WaitSyncDMAComplete(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (sampleData.DMA_ADC_adcflag[0] && sampleData.DMA_ADC_adcflag[1]) {
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[0] = 0;
|
|
|
|
|
|
sampleData.DMA_ADC_adcflag[1] = 0;
|
|
|
|
|
|
return 1; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0; // ת<><D7AA>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-----------------------
|
|
|
|
|
|
u16 DMA_ComputeSampleData_ADC0(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
u16 adcCode;
|
|
|
|
|
|
u32 adcCount;
|
|
|
|
|
|
u8 i ;
|
|
|
|
|
|
for(i = sampleData.SkipSampNum ; i < sampleData.DMA_ADC_SampLen ;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
adcCode = ((((sampleData.DMA_ADC_Buffer[0][i] & 0xFFFFFF) | ((sampleData.DMA_ADC_Buffer[0][i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
|
adcCount += adcCode ;
|
|
|
|
|
|
}
|
|
|
|
|
|
adcCode = adcCount>>sampleData.DMA_ADC_Exponent;
|
|
|
|
|
|
return adcCode;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
u16 DMA_ComputeSampleData_ADC1(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
u16 adcCode;
|
|
|
|
|
|
u32 adcCount;
|
|
|
|
|
|
u8 i ;
|
|
|
|
|
|
for(u8 i = sampleData.SkipSampNum ; i < sampleData.DMA_ADC_SampLen ;i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
adcCode = ((((sampleData.DMA_ADC_Buffer[1][i] & 0xFFFFFF) | ((sampleData.DMA_ADC_Buffer[1][i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
|
adcCount += adcCode ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
adcCode = adcCount >> sampleData.DMA_ADC_Exponent;
|
|
|
|
|
|
return adcCode;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*==========================================================================*/
|
|
|
|
|
|
//ADC<44><43><EFBFBD>в<EFBFBD><D0B2><EFBFBD>--<2D>ʺϲ<CABA><CFB2>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
|
|
|
|
|
//ʹ<><CAB9>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>seq_config
|
|
|
|
|
|
//StartDMA_ForADC0_SeqSample();
|
|
|
|
|
|
//u16 SeqData[4];
|
|
|
|
|
|
//if(adcFlag)ADC_ReadSeqData(SeqData,sizeof(SeqData) / sizeof(SeqData[0]));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
typedef enum {
|
|
|
|
|
|
seq_1, seq_2, seq_3, seq_4,/*......*/seq_Count
|
|
|
|
|
|
}__SeqIndex;
|
|
|
|
|
|
#define SEQ_CFG { \
|
|
|
|
|
|
.Gain = GAIN64, \
|
|
|
|
|
|
.SPS = SPS_12P5, \
|
|
|
|
|
|
.SeqCount = seq_Count, \
|
|
|
|
|
|
.SeqChannel = { \
|
|
|
|
|
|
[seq_1] = {ADC0_AIN0, ADC0_AIN1}, \
|
|
|
|
|
|
[seq_2] = {ADC1_AIN3, ADC1_AIN4}, \
|
|
|
|
|
|
[seq_3] = {ADC1_AIN2, ADC1_AVSS}, \
|
|
|
|
|
|
[seq_4] = {ADC1_AIN5, ADC1_AIN4}, \
|
|
|
|
|
|
}, \
|
|
|
|
|
|
.adcFlag = 0 ,/* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־ */ \
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
__SeqConfig_TypeDef seq_config = SEQ_CFG;
|
|
|
|
|
|
|
|
|
|
|
|
//void SetSampleSeqConfig(u8 Gain ,u8 SPS) //Ӧ<><D3A6><EFBFBD>ʺϲ<CABA><CFB2>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>Ҫ~~~Ҫ<>ľͲ<C4BE><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//{
|
|
|
|
|
|
// seq_config.Gain = Gain ;
|
|
|
|
|
|
// seq_config.SPS = SPS ;
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
void seqcallback(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
seq_config.adcFlag = 1 ;
|
|
|
|
|
|
}
|
|
|
|
|
|
void StartDMA_ForADC0_SeqSample(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
DMA_ADC0_SingleChannel_SEQ_Init(&seq_config);
|
|
|
|
|
|
|
|
|
|
|
|
seq_config.adcFlag = 0;
|
|
|
|
|
|
DMA_register_irq_callback(DMA_CHANNEL_ADC_CTL,NULL,seqcallback);
|
|
|
|
|
|
|
|
|
|
|
|
StartDMA_SEQ_ADC(ADC_0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ADC<44><43><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
void ADC_ReadSeqData(u16* SeqData ,u8 SeqNumCount)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADC_Data_t* tempSeqData;
|
|
|
|
|
|
if (seq_config.adcFlag > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
tempSeqData = seq_config.adcBuffer;//adcBuffer<65><72><EFBFBD><EFBFBD>Ū<EFBFBD>ɴ<EFBFBD><C9B4>ݣ<EFBFBD>
|
|
|
|
|
|
for(u8 i = 0 ; i < SeqNumCount ; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
tempSeqData[i].ADC_Data = ((((tempSeqData[i].ADC_Data & 0xFFFFFF) | ((tempSeqData[i].ADC_Data & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;
|
|
|
|
|
|
SeqData[i] = tempSeqData[i].ADC_Data;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
seq_config.adcFlag = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******-==============================================================================================================================================================******/
|
|
|
|
|
|
//__IntSingleSampleData_t sampleData1;
|
|
|
|
|
|
//__IntSyncSampleData_t sampleData2;
|
|
|
|
|
|
//__SingleDmaSampleData_t sampleData3;
|
|
|
|
|
|
//__DualSyncDmaSampleData_t sampleData4;
|
|
|
|
|
|
|
|
|
|
|
|
////<2F>жϵ<D0B6>ADC<44><43>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
////ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
|
//void ADC0_SingleIRQ_Callback(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if(sampleData1.skip_num) {sampleData1.skip_num -- ; return; }
|
|
|
|
|
|
// //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// sampleData1.adc_buffer+= ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
|
|
|
|
|
// sampleData1.counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void ComputeSingleADC0SampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//{
|
|
|
|
|
|
// StopADC(ADC_0);
|
|
|
|
|
|
// //<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
|
|
|
|
|
// if(sampleData1.counter != 0) sampleData1.adc_buffer /= (u32)sampleData1.counter;
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void StartADC0_SampingData(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData1.adc_buffer = 0 ;
|
|
|
|
|
|
// sampleData1.counter =0 ;
|
|
|
|
|
|
// sampleData1.skip_num = 3 ;
|
|
|
|
|
|
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
|
|
|
|
|
// ADC_Init(ADC_0, sampleData1.adc_cfg.SPS, sampleData1.adc_cfg.Gain, sampleData1.adc_cfg.PChan, sampleData1.adc_cfg.NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
|
|
|
|
|
// ADC_register_irq_callback(ADC_0,ADC0_SingleIRQ_Callback);
|
|
|
|
|
|
// StartADC(ADC_0);
|
|
|
|
|
|
//}
|
|
|
|
|
|
////ADC1......
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////<2F>ж<EFBFBD>˫ADCͬ<43><CDAC><EFBFBD><EFBFBD>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
////ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
|
//void ADC_SyncIRQ_Callback(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if(sampleData2.skip_num) {sampleData2.skip_num -- ; return; }
|
|
|
|
|
|
// //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// sampleData2.adc_buffer[0] += ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
|
|
|
|
|
// sampleData2.adc_buffer[1] += ADC_ReadData(ADC_1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
|
|
|
|
|
// sampleData2.counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void ComputeSyncADCSampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//{
|
|
|
|
|
|
// StopADC(ADC_0);
|
|
|
|
|
|
// StopADC(ADC_1);
|
|
|
|
|
|
// //<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
|
|
|
|
|
// if(sampleData2.counter != 0)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// sampleData2.adc_buffer[0] /= (u32)sampleData2.counter;
|
|
|
|
|
|
// sampleData2.adc_buffer[1] /= (u32)sampleData2.counter;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void StartADC_Sync_SampingData(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData2.adc_buffer[0] = 0 ;
|
|
|
|
|
|
// sampleData2.adc_buffer[1] = 0 ;
|
|
|
|
|
|
// sampleData2.counter =0 ;
|
|
|
|
|
|
// sampleData2.skip_num = 3 ;
|
|
|
|
|
|
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
|
|
|
|
|
// ADC_Init(ADC_0, sampleData2.adc_cfg.SPS, sampleData2.adc_cfg.Gain0, sampleData2.adc_cfg.PChan0, sampleData2.adc_cfg.NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
|
|
|
|
|
// ADC_Init(ADC_1, sampleData2.adc_cfg.SPS, sampleData2.adc_cfg.Gain1, sampleData2.adc_cfg.PChan1, sampleData2.adc_cfg.NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
|
|
|
|
|
|
// ADC_SyncCmd(ENABLE);/* 4. ADCͬ<43><CDAC>ʹ<EFBFBD><CAB9> */
|
|
|
|
|
|
// ADC_register_irq_callback(ADC_0,ADC_SyncIRQ_Callback);//ֻ<>迪<EFBFBD><E8BFAA>ADC_0
|
|
|
|
|
|
// StartADC(ADC_0);//ֻ<>迪<EFBFBD><E8BFAA>ADC_0
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////DMA<4D><41>ADC<44><43>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
//void DMAForSingleADC0_Callback()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData3.adcflag = 1;
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void StartDMAForSingleADC0SampingData(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData3.skip_num = 3;
|
|
|
|
|
|
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
|
|
|
|
|
// ADC_Init(ADC_0, sampleData3.adc_cfg.SPS, sampleData3.adc_cfg.Gain, sampleData3.adc_cfg.PChan, sampleData3.adc_cfg.NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
|
|
|
|
|
//// ADC_DMA_Init(ADC_0,sampleData3.dma_buffer,sampleData3.samp_len+sampleData3.skip_num);
|
|
|
|
|
|
// DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForSingleADC0_Callback);
|
|
|
|
|
|
// DMA_StartADC(ADC_0);
|
|
|
|
|
|
//}
|
|
|
|
|
|
//u16 DMA_ComputeSingleSampleData_ADC0(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// u16 adcCode;
|
|
|
|
|
|
// u32 adcCount;
|
|
|
|
|
|
// u8 i ;
|
|
|
|
|
|
// for(i = sampleData3.skip_num ; i < sampleData3.samp_len ;i++)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// adcCode = ((((sampleData3.dma_buffer[i] & 0xFFFFFF) | ((sampleData3.dma_buffer[i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
|
// adcCount += adcCode ;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// adcCode = adcCount>>sampleData3.exponent;
|
|
|
|
|
|
// return adcCode;
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
////ADC1......
|
|
|
|
|
|
|
|
|
|
|
|
////DMA˫ADC<44><43>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
|
|
|
|
|
//void DMAForSyncADC0_Callback()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData4.adcflag[0] = 1;
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void DMAForSyncADC1_Callback()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData4.adcflag[1] = 1;
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void StartDMA_ForADCSyncSampingData(void)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// sampleData3.skip_num = 3;
|
|
|
|
|
|
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
|
|
|
|
|
// ADC_Init(ADC_0, sampleData4.adc_cfg.SPS, sampleData4.adc_cfg.Gain0, sampleData4.adc_cfg.PChan0, sampleData4.adc_cfg.NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
|
|
|
|
|
// ADC_Init(ADC_1, sampleData4.adc_cfg.SPS, sampleData4.adc_cfg.Gain1, sampleData4.adc_cfg.PChan1, sampleData4.adc_cfg.NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
|
|
|
|
|
|
//
|
|
|
|
|
|
//// ADC_DMA_Init(ADC_0,sampleData4.dma_buffer[0],sampleData4.samp_len+sampleData4.skip_num);
|
|
|
|
|
|
//// ADC_DMA_Init(ADC_1,sampleData4.dma_buffer[1],sampleData4.samp_len+sampleData4.skip_num);
|
|
|
|
|
|
// DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForSyncADC0_Callback);
|
|
|
|
|
|
// DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForSyncADC1_Callback);
|
|
|
|
|
|
|
|
|
|
|
|
// DMA_StartADC(ADC_0);
|
|
|
|
|
|
// DMA_StartADC(ADC_1);
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|