用SDK包开发K66FX18学习笔记(5)

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函数里写采集打印。

发布了11 篇原创文章 · 获赞 12 · 访问量 2203
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章