本篇测试板载12位AD,通过阅读Datasheet可知道,5M的转换率,还是挺快的。板载有一个可调电位器,电路如图1所示:
本次只测试基本的AD转换,实际项目中可测试中断。这个项目中,算是第一次使用复用引脚输出,所以,引脚的初始化定义很重要,如图2所示: - CLOCK_EnableClock(kCLOCK_Adc0); /* SYSCON->AHBCLKCTRL[0] |= SYSCON_AHBCLKCTRL_ADC0_MASK; */
- IOCON_PinMuxSet(IOCON, 1, 0, IOCON_MODE_INACT | IOCON_FUNC0 | IOCON_ANALOG_EN | IOCON_INPFILT_OFF);/
复制代码
接下来就是定义时钟和初始化AD,将转换数据付给一个全局变量,在watch窗口中,观察数据变化,如图3,图4所示: - void ADC_Configuration(void)
- {
- adc_config_t adcConfigStruct;
- adc_conv_seq_config_t adcConvSeqConfigStruct;
- /* Configure the converter. */
- adcConfigStruct.clockMode = kADC_ClockSynchronousMode; /* Using sync clock source. */
- adcConfigStruct.clockDividerNumber = 1; /* The divider for sync clock is 2. */
- adcConfigStruct.resolution = kADC_Resolution12bit;
- adcConfigStruct.enableBypassCalibration = false;
- adcConfigStruct.sampleTimeNumber = 0U;
- ADC_Init(ADC0, &adcConfigStruct);
- /* Use the temperature sensor input to channel 0. */
- ADC_EnableTemperatureSensor(ADC0, false);
- /* Enable channel 0's conversion in Sequence A. */
- adcConvSeqConfigStruct.channelMask = (1U << 3); /* Includes channel 0. */
- adcConvSeqConfigStruct.triggerMask = 0U;
- adcConvSeqConfigStruct.triggerPolarity = kADC_TriggerPolarityNegativeEdge;
- adcConvSeqConfigStruct.enableSingleStep = false;
- adcConvSeqConfigStruct.enableSyncBypass = false;
- adcConvSeqConfigStruct.interruptMode = kADC_InterruptForEachSequence;
- ADC_SetConvSeqAConfig(ADC0, &adcConvSeqConfigStruct);
- ADC_EnableConvSeqA(ADC0, true); /* Enable the conversion sequence A. */
- }
复制代码- ADC_DoSoftwareTriggerConvSeqA(ADC0);
-
- while(!ADC_GetChannelConversionResult(ADC0, 3U, &adcResultInfoStruct))
- {}
- ADResult = adcResultInfoStruct.result;
- ADNumber = adcResultInfoStruct.channelNumber ;
- Delay_nms(0xAFFF);
复制代码
使用螺丝刀转动电位器,可以观察数值的变化,如图5所示:
这款芯片AD也挺多,有时间要多路测试。
|