/*****************头文件*************************/
#include "fsl_common.h"
#include "fsl_port.h"
#include "fsl_gpio.h"
#include "adc_Interrupt.h"
#include "fsl_adc16.h"

uint32_t g_Adc12ConversionValue = 0;    //ADC寄存器数值
uint32_t g_Adc12_Value = 0; //返回转换后的电压值,数值为0-3040
uint32_t g_Adc12Count = 0;

/*****************ADC初始化*************************
    * adc16ConfigStruct.referenceVoltageSource = kADC16_ReferenceVoltageSourceVref; //选择VREFL为参考电压
    * adc16ConfigStruct.clockSource = kADC16_ClockSourceAsynchronousClock;
    * adc16ConfigStruct.enableAsynchronousClock = true;
    * adc16ConfigStruct.clockDivider = kADC16_ClockDivider8;
    * adc16ConfigStruct.resolution = kADC16_ResolutionSE12Bit; //分辨率为12位,最大值4096
    * adc16ConfigStruct.longSampleMode = kADC16_LongSampleDisabled;
    * adc16ConfigStruct.enableHighSpeed = false;
    * adc16ConfigStruct.enableLowPower = false;
    * adc16ConfigStruct.enableContinuousConversion = false;
*******************************************************/
void ADC12_InterrputInit()   //ADC初始化
{
    /*ADC分辨率选择12位,最大值4096*/
    /*参考电压选择VREFL,连接VDDA(3.3V)*/
    adc16_config_t adc16ConfigStruct;
    adc16_channel_config_t adc16ChannelConfigStruct;
    EnableIRQ(ADC0_IRQn);
    ADC16_GetDefaultConfig(&adc16ConfigStruct);
    adc16ConfigStruct.enableContinuousConversion = true;    //开启连续转换
    ADC16_Init(ADC0, &adc16ConfigStruct);
    ADC16_EnableHardwareTrigger(ADC0, false);   //ADC软件触发
    adc16ChannelConfigStruct.channelNumber  = 5u;   //选择通道5
    adc16ChannelConfigStruct.enableInterruptOnConversionCompleted = true; //使能ADC中断触发标志
    ADC16_SetChannelConfig(ADC0, 0u, &adc16ChannelConfigStruct);
}

uint32_t adc_ReturnValue()
{
    g_Adc12_Value = g_Adc12ConversionValue * 3040/ g_Adc12_12bitFullRange;
    return g_Adc12_Value;  //电压值放大1000倍
}

void ADC0_IRQHandler(void)
{
    g_Adc12ConversionValue = ADC16_GetChannelConversionValue(ADC0, 0u); //读取ADC寄存器数值
    g_Adc12Count++;
    g_Adc12Count %= 1000;
    SDK_ISR_EXIT_BARRIER;   //清除中断标志位
}