ADC採集(光敏電阻)
1、宏定義
#define ADC0_INSTANCE ADC0
#define ADC1_GPIO GPIOA
#define ADC1_PORT PORTA
#define ADC1_PIN0 7U //ADC引腳號
#define ADC1_CHANNEL 10U //ADC通道號,即ADC0通道10
#define ADC1_CHANNEL_GROUP 0U //通道組,最多8個(0-7)
2、ADC採集初始化
void ADC_PORT_INIT(void)//ADC端口時鐘初始化與端口複用
{
CLOCK_EnableClock(kCLOCK_PortA);//使能端口時鐘
PORT_SetPinMux(ADC1_PORT,ADC1_PIN0,kPORT_PinDisabledOrAnalog);//端口複用爲ADC模式
}
void ADC_CONFIG(void)//ADC配置
{
adc16_config_t ADCconfig;//定義ADC初始化句柄
ADC16_GetDefaultConfig(&ADCconfig);//配置重置
ADCconfig.resolution = kADC16_ResolutionSE12Bit;//ADC分辨率爲12位
ADCconfig.enableContinuousConversion = true;//使能連續採樣模式
ADC16_Init(ADC0_INSTANCE,&ADCconfig);//初始化
ADC16_EnableHardwareTrigger(ADC0_INSTANCE,false);//失能硬件流
//ADC16_SetHardwareAverage(ADC_INSTANCE,kADC16_HardwareAverageCount32);//設置ADC硬件求平均值
}
void ADC_CHANNEL_CONFIG(void)//ADC通道配置
{
adc16_channel_config_t ADCCHANNELconfig;//定義ADC通道初始化句柄
ADCCHANNELconfig.channelNumber = ADC1_CHANNEL;
ADCCHANNELconfig.enableInterruptOnConversionCompleted = false;//使能轉換完成中斷
ADC16_SetChannelConfig(ADC0_INSTANCE,ADC1_CHANNEL_GROUP,&ADCCHANNELconfig);//通道配置
/*if(ADC16_DoAutoCalibration(ADC_INSTANCE)==kStatus_Success)//硬件校準
{
PRINTF("HardWere Calibration sucessful!\n");
}
else
{
PRINTF("HardWere Calibration error!\n");
}*/
}
void ADC_NVIC_INIT(void)//ADC的中斷配置
{
__NVIC_SetPriority(ADC0_IRQn,0);//設置中斷優先級
__NVIC_EnableIRQ(ADC0_IRQn);//使能中斷
}
void ADC_INIT(void)//ADC初始化
{
ADC_PORT_INIT();
ADC_CONFIG();
ADC_CHANNEL_CONFIG();
//ADC_NVIC_INIT();
}
/*void ADC0_IRQHandler(void)//中斷服務函數
{
if(ADC16_GetStatusFlags(ADC_INSTANCE))
{
Valu = ADC16_GetChannelConversionValue(ADC_INSTANCE,ADC_CHANNEL_GROUP);//獲取ADC的值
PRINTF(" Valu = %d",Valu);
Valu_vo = ((float)Valu)*(float)3.3/(float)4096;
PRINTF(" Volote = %f\n",Valu_vo);
ADC16_ClearStatusFlags(ADC_INSTANCE,kADC16_ChannelMuxA);
}
}*/
初始化完成後,若沒開中斷,可以在main函數裏打印相關採集信息
if(ADC16_GetStatusFlags(ADC0_INSTANCE))
{
Valu = ADC16_GetChannelConversionValue(ADC0_INSTANCE,ADC1_CHANNEL_GROUP);//獲取ADC的值
PRINTF(" Valu = %d\n",Valu); //打印
}
學習心得:
1、K66的ADC可以採用軟件流和硬件流,但在測試的時候硬件流測不出數據,所以就只用了軟件流。
2、ADC可以使用中斷採集,也可以不用中斷,開中斷只需要打開轉換完成中斷就可以了,而不用中斷的話就要在main函數裏寫採集打印。