/***********************************************************************
 * Copyright (c)  2017 - 2022, Unicmicro Co.,Ltd .
 * All rights reserved.
 * Filename    : single_mode_mult_ch.c
 * Description : single_mode_mult_ch source file
 * Author(s)   : Hackett
 * version     : V1.0
 * Modify date : 2022-07-10
 ***********************************************************************/
#include  "single_mode_mult_ch.h"
#include  "common.h"
#include  "adc.h"
#include  "config.h"
#include  "app.h"

uint8_t g_adc_mult_ch_flag = 0;


/********多通道通道单次模式使用************/
uint8_t g_ch = 0; 
uint16_t g_adc_value_tab[14] ={0};

/************************************************************************
 * Function   	: adc_multiple_ch_func
 * Description	: adc_multiple_ch_func 回调函数
 * Input 		: uint8_t ch_num ADC通道
 * Output 		: none
 * Return		: none
 ************************************************************************/
void adc_multiple_ch_func(uint8_t ch_num) //多通道中断回调（以1、3、6为例）
{
	
	g_ch = adc_channel_cal(ch_num);   //通道计算转换
	
	g_adc_value_tab[g_ch] = adc_irq_get_data(g_ch); //根据实际通道取值
	
	g_adc_mult_ch_flag = 1;                        
}

/************************************************************************
 * Function   	: adc_single_mode_multi_ch_test
 * Description	: adc_single_mode_multi_ch_test adc多通单次采样模式
 * Input 		: none
 * Output 		: none
 * Return		: none
 ************************************************************************/
void adc_single_mode_multi_ch_test(void)  //多通道单次模式采样（以通道1、3、6为例）
{
	uint8_t i;
	
	
	adc_init(ADC_REF_VDDH,ADC_SAMPL_RATE_50K_SPS,ADC_SINGLE_MODE);							//ADC初始化，选择ADC参考电压源、采样频率 和 采样模式
	
	adc_channel_gpio_config(ADC_CH1_EN|ADC_CH2_EN|ADC_CH3_EN, ADC_PF0|ADC_PA6|ADC_PB0);		//配置ADC转换通道

#ifdef ADC_IRQ_EN														//在app.h开关
	printfS("adc single mode --- multiple channel irq_start!!!\r\n");
	uint8_t count = 0;
	
	adc_irq_init(ADC_IRQ_ENABLE,ADC_IT_CH1_EN|ADC_IT_CH2_EN|ADC_IT_CH3_EN,\
	adc_multiple_ch_func);	//使能通道1、2、3中断
	for(i=0; i<5; i++)
	{
		adc_convert_start();
		
		while(count<3)
		{
			while(g_adc_mult_ch_flag == 0);
			g_adc_mult_ch_flag = 0;
			count++;
		}
		count = 0;
		
		printfS("g_adc[1]_value = %d, adc_vol = %.3fV\r\n",\
		g_adc_value_tab[1],(float)g_adc_value_tab[1]/4095*(float)3.3);  
		
		printfS("g_adc[2]_value = %d, adc_vol = %.3fV\r\n",\
		g_adc_value_tab[2],(float)g_adc_value_tab[2]/4095*(float)3.3);
		
		printfS("g_adc[3]_value = %d, adc_vol = %.3fV\r\n",\
		g_adc_value_tab[3],(float)g_adc_value_tab[3]/4095*(float)3.3);
		
		printfS("\r\n");

	}
#else
	printfS("adc single mode --- multiple channel start!!!\r\n");

	adc_convert_start();
	for(i=1; i<4; i++)
	{
		g_adc_value_tab[i] = adc_get_data(i);    //通道1-3取数
		
		printfS("g_adc%d_value = %d, adc_vol = %.3fV\r\n", i, g_adc_value_tab[i],(float)g_adc_value_tab[i]/4095*(float)3.3);  
	}

#endif

}
