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

volatile uint8_t g_adc_complete_flag = 0;

uint8_t g_ch; 

/********单通道单次模式使用************/
uint16_t g_adc_value = 0;

/************************************************************************
 * Function   	: adc_single_ch_func
 * Description	: adc_single_ch_func 回调函数
 * Input 		: uint8_t ch_num ADC通道
 * Output 		: none
 * Return		: none
 ************************************************************************/
void adc_single_ch_func(uint8_t ch_num) //单通道回调 以通道3为例
{
	g_ch = adc_channel_cal(ch_num);
	g_adc_value = adc_irq_get_data(g_ch);
	g_adc_complete_flag = 1;
}

/************************************************************************
 * Function   	: adc_single_mode_single_ch_test
 * Description	: adc_single_mode_single_ch_test adc单通单次采样模式
 * Input 		: none
 * Output 		: none
 * Return		: none
 ************************************************************************/
void adc_single_mode_single_ch_test(void)
{
	
	uint8_t i;

	adc_init(ADC_REF_VDDH,ADC_SAMPL_RATE_50K_SPS,ADC_SINGLE_MODE);		//ADC初始化，选择ADC参考电压源、ADCCLK分频和采样模式

	adc_channel_gpio_config(ADC_CH3_EN ,ADC_PB0);						//配置ADC转换通道:通道3_PB1

	opa_init(ADC_MODE);													//OPA作为ADC缓冲初始化
	
#ifdef ADC_IRQ_EN														//在app.h开关													
	printfS("adc single mode --- single channel irq_start!!!\r\n");
	
	adc_irq_init(ADC_IRQ_ENABLE,ADC_IT_CH3_EN,adc_single_ch_func);	
	for(i=0; i<10; i++)
	{
		adc_convert_start();
		while(g_adc_complete_flag == 0);
		g_adc_complete_flag = 0;

		printfS("g_adc_value = %d, adc_vol = %.3fV\r\n",g_adc_value,(float)g_adc_value/4095*(float)3.3);

	}
			
#else
	
	printfS("adc single mode --- single channel start!!!\r\n");
	
	for(i=0; i<10; i++)
	{
		adc_convert_start();
		g_adc_value = adc_get_data(3);
		printfS("g_adc_value = %d, adc_vol = %.3fV\r\n",g_adc_value,(float)g_adc_value/4095*(float)3.324);
	}
	
	
#endif
}


