/***********************************************************************************
 * FileName: 2016_newOBC_Adc.c
 *
 * 功能：          AD配置，AD数据处理
 *
 * 适用范围：
 *
 * Created on: 2016年3月18日
 *
 * Author: Administrator
 ***********************************************************************************/

#include "2016_newOBC_main.h"    /*包含所有头文件*/

void AdcInit(void)
{
    InitAdc();
    EALLOW;
    // 1.设置采样模式为顺序采样模式,或称为单一采样模式
    AdcRegs.ADCSAMPLEMODE.all       = 0;

    // 2.使能内部温度传感器
    AdcRegs.ADCCTL1.bit.TEMPCONV    = 1;

    // 3.设置SOCx对应采样通道,[必须]与宏定义RESULT_XXX相对应
    AdcRegs.ADCSOC0CTL.bit.CHSEL    = CH_PFC_IT2;  // 高速电流信号采样,由PWM触发
    AdcRegs.ADCSOC1CTL.bit.CHSEL    = CH_PFC_IT2;  // CH_PFC_IN_IAC;
    AdcRegs.ADCSOC2CTL.bit.CHSEL    = CH_PFC_IT2;  // CH_PFC_IN_IAC
    AdcRegs.ADCSOC3CTL.bit.CHSEL    = CH_PFC_IT1;  // CH_PFC_IN_IAC;
    AdcRegs.ADCSOC4CTL.bit.CHSEL    = CH_PFC_IT1;  // CH_PFC_IN_IAC;
    AdcRegs.ADCSOC5CTL.bit.CHSEL    = CH_VAC_L;     //result_5
    AdcRegs.ADCSOC6CTL.bit.CHSEL    = CH_PFC_VAC_L; //result_6
    AdcRegs.ADCSOC7CTL.bit.CHSEL    = CH_VAC_N;     //result_7
    AdcRegs.ADCSOC8CTL.bit.CHSEL    = CH_PFC_VAC_N; //result_8
    AdcRegs.ADCSOC9CTL.bit.CHSEL    = CH_VBULK;  // 以下为低速信号采样
    AdcRegs.ADCSOC10CTL.bit.CHSEL   = CH_VBULK;   //result_10
    AdcRegs.ADCSOC11CTL.bit.CHSEL   = CH_NTC_AMB;
    AdcRegs.ADCSOC12CTL.bit.CHSEL   = CH_NTC_LLC;
    AdcRegs.ADCSOC13CTL.bit.CHSEL 	= CH_LLC_DRV_UDC;//CH_PFC_IN_IAC;
    AdcRegs.ADCSOC14CTL.bit.CHSEL   = CH_LLC_DRV_UDC;
    AdcRegs.ADCSOC15CTL.bit.CHSEL   = CH_NTC_PFC;  //pfc温度

    // 设置SOCx触发源  //debug: 需要根据实际情况进行调整
/*    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;  //PFC过零点触发
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;  //IT1
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;  //IT1
    AdcRegs.ADCSOC3CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //IT2
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //IT2
    AdcRegs.ADCSOC5CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;
    AdcRegs.ADCSOC7CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;   //由LLC部分pwm触发
    AdcRegs.ADCSOC9CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;   //由LLC部分pwm触发
    AdcRegs.ADCSOC10CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;
    AdcRegs.ADCSOC11CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC12CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC13CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC14CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC15CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
*/

    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //PFC过零点触发
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //IT2
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //IT2
    AdcRegs.ADCSOC3CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;  //IT1
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;  //IT1
    AdcRegs.ADCSOC5CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //VIN_L
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //VIN_L
    AdcRegs.ADCSOC7CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //VIN_N
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL  = ADCTRIG_EPWM2_SOCA;  //VIN_N
    AdcRegs.ADCSOC9CTL.bit.TRIGSEL  = ADCTRIG_EPWM1_SOCA;  //由LLC部分pwm触发
    AdcRegs.ADCSOC10CTL.bit.TRIGSEL = ADCTRIG_EPWM1_SOCA;
    AdcRegs.ADCSOC11CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC12CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC13CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC14CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;
    AdcRegs.ADCSOC15CTL.bit.TRIGSEL  = ADCTRIG_CPU_TINT0;



    // 设置采样窗口(窗口宽度 = ACQPS_Value + 1)
    #define ACQPS_Value 6
    AdcRegs.ADCSOC0CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC1CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC2CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC3CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC4CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC5CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC6CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC7CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC8CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC9CTL.bit.ACQPS    = ACQPS_Value;
    AdcRegs.ADCSOC10CTL.bit.ACQPS   = ACQPS_Value;
    AdcRegs.ADCSOC11CTL.bit.ACQPS   = ACQPS_Value;
    AdcRegs.ADCSOC12CTL.bit.ACQPS   = ACQPS_Value;
    AdcRegs.ADCSOC13CTL.bit.ACQPS   = ACQPS_Value;
    AdcRegs.ADCSOC14CTL.bit.ACQPS   = ACQPS_Value;
    AdcRegs.ADCSOC15CTL.bit.ACQPS   = ACQPS_Value;
    #undef ACQPS_Value

    // 设置采样通道优先级:通道0 & 1 : 为高速电流采样通道,所以如此设置,是为了满足PWM时效
    AdcRegs.SOCPRICTL.bit.SOCPRIORITY = PRIORITY_SOC0_8;

    // 设置中断标志触发条件: 采样完成时
    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;

    // 禁用ADC中断触发SOCx
    AdcRegs.ADCINTSOCSEL1.all       = 0;
    AdcRegs.ADCINTSOCSEL2.all       = 0;

    // 设置中断信号的触发源
    AdcRegs.INTSEL1N2.bit.INT1SEL  = ADC_EOC08;  //L_N采样完成
 //   AdcRegs.INTSEL1N2.bit.INT2SEL  = ADC_EOC04;  //CT2

   // 使能中断信号,但并不意味这会触发中断,仅仅是使能信号
    AdcRegs.INTSEL1N2.bit.INT1E     = 1;      //CT1
 //   AdcRegs.INTSEL1N2.bit.INT2E     = 1;      //CT2
   // 禁用连续采样,即下次采样来临前前次采样完成标志必须重置
    AdcRegs.INTSEL1N2.bit.INT1CONT  = 0;
    EDIS;

    DELAY_US(1000L);
}


/*************************************************************************
 *  Function: AdcFinish
 *  功能说明：  判断AD采样序列是否完成
 ************************************************************************/
Uint16 AdcFinish(void)
{
    Uint16 result = 0;
    if (AdcRegs.ADCINTFLG.bit.ADCINT1)
    {
        AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;    //Clear ADCINT1
        result = 1;                              //转换完成
    }
    return (result);
}


/***********************************************************************************
 * The End
 ***********************************************************************************/
