/*****************头文件*************************/ #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; uint32_t g_Adc12_Value = 0; 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) { /* Read conversion result to clear the conversion completed flag. */ g_Adc12ConversionValue = ADC16_GetChannelConversionValue(ADC0, 0u); g_Adc12Count++; g_Adc12Count %= 1000; SDK_ISR_EXIT_BARRIER; }