/**
 * @file DeltaSigmaADC.c
 * @author ?穻 (tony@e-besthealth.com)
 * @brief 瞳蚚 ADC 笢陂 ADC 
 * ADC 嶱宎
 * ADC 燊寯
 * @version 0.1
 * @date 2019-07-25
 *
 * @copyright BEST HEALTH ELECTRONIC INC (c) 2019
 *
 */

#include "DeltaSigmaADC_API.h"
#include "DeltaSigmaADC_Config.h"
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// ====================================================================================@
//                                  埭測徨                                             @
// ====================================================================================@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
volatile ADCSource_t ADCSourceData;

/**
 * @brief ADC場宎趙饜离,掀?籵耋﹜蕉?脹
 *
 */
void fun_ADCInit()
{

    //ADCK = 0x0; 
    _adcs = 0b00000000; 
    //ADC_Ref = VREFP&VREFN; OSR = 16384; 
    _adcr0 = 0b00000001; 
    //ADC_RefBufN = Disable; ADC_RefBufP = Disable; FLMS = CHOP=2,fM/12; 
    _adcr1 = 0b01000000; 
    //VOREG = Disable; 
    _pwrc = 0b00000000; 
    //PGAGN = x1; ADGN = x1; VGN = x1; 
    _pgac0 = 0b00000000; 
    //INIS OFF; Input_Change = Normal; DCSET = +0V; VCM = 1.05; 
    _pgac1 = 0b00000000; 
    //CHSP = AN0; CHSN = AN1; 
    _pgacs = 0b00010000; 
    //DAC_Data = 0xfff; 
    _dsdah = 0b11111111; 
    //DAC_Data = 0xfff; 
    _dsdal = 0b00001111; 
    //DAC_POWER OFF; DAC_REF = VIN; 
    _dsdacc = 0b01000000; 


}
/**
 * @brief 嶱ADC?埭嶱宎滖
 * @note  籵綎笢源宒陂
 *
 */
void fun_ADCStart()
{
	ADCSourceData.SamplingCnt = 0;
	ADCSourceData.flag.b.IsReady = 0;
	SET_ADC_POWER(ON);
	SET_ADC_MODE(ON);
	SET_ADC_ISR(ON);	
	SET_ADC_STARTCONVERT();	
}
/**
 * @brief 燊寯ADC?埭礿砦滖
 *
 */
void fun_ADCStop()
{	
	SET_ADC_ISR(OFF);
	SET_ADC_POWER(OFF);
	SET_ADC_MODE(OFF);
}
//@------------ADC 笢諳滲---------------@
DEFINE_ISR(ADC_ISR, ADC_VECTOR)
{
	if (_eoc == 1)
	{ //ADC 滖俇傖
		ADCSourceData.SamplingCnt++;
		//遁裁ㄛ菴侐遁符嶱宎?燴
		if (ADCSourceData.SamplingCnt > 3)
		{
			// Read current ADC
			_adcdl = 1;
			ADCSourceData.data.byte.ByteRes = 0x00;
			ADCSourceData.data.byte.ByteLow  = _adrl;
			ADCSourceData.data.byte.ByteMid  = _adrm;
			ADCSourceData.data.byte.ByteHigh = _adrh;
			_adcdl = 0; //莮俇傖ㄛ秏熵湔
			ADCSourceData.flag.b.IsReady = 1;
		}
		_eoc = 0;
	}
}