/**
 * @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()
{

/*AP replace code,don't delete!*/

}
/**
 * @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;
	}
}