- /*************************ADC配置大体如下************************************************/
- ADC:
- 配置ADC:
- /* Enable ADC module clock */
- CLK_EnableModuleClock(ADC_MODULE);
- /* ADC clock source is 22.1184MHz, set divider to 7, ADC clock is 22.1184/7 MHz */
- CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));
-
- 配置ADC时一定要端口的数字输入功能禁止
- /* Disable the P1.0 - P1.3 digital input path to avoid the leakage current */
- GPIO_DISABLE_DIGITAL_PATH(P1, 0xF); //0000 1111
-
- /* Configure the P1.0 - P1.3 ADC analog input pins */
- SYS->P1_MFP &= ~(SYS_MFP_P10_Msk | SYS_MFP_P11_Msk | SYS_MFP_P12_Msk | SYS_MFP_P13_Msk);
- SYS->P1_MFP |= SYS_MFP_P10_AIN0 | SYS_MFP_P11_AIN1 | SYS_MFP_P12_AIN2 | SYS_MFP_P13_AIN3 ;
-
- GPIO IP有个寄存器叫OFFD(OFF Digital),关闭相应管脚的数字通路的意思。如果某个管脚配置
- 为模拟功能,例如:ADC、DAC、ACMP、SEG、COM、DH1、DH2、V1、V2、V3等功能,这
- 些管脚对应的OFFD bit应该使能,关闭到数字区域的通路,避免内部数字器件不停的打开、关闭
- 而漏电
-
-
-
- NUC029xAN A/D转换器支持四种操作模式: 单次模式, Burst模式, 单周期扫描模式和连续扫描模
- 式
- ADC continuous scan mode sample code :
- //开启ADC
- /* Power on ADC module */
- ADC_POWER_ON(ADC);
- /* Set the ADC operation mode as continuous scan, input mode as single-end and
- enable the analog input channel 0, 1, 2 and 3 */
- ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_CONTINUOUS, 0xF);
- /* clear the A/D interrupt flag for safe */
- ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
- /* start A/D conversion */
- ADC_START_CONV(ADC);
- /* Wait conversion done */
- while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));
- //转换结束后的值会放在使能通道对应的A/D寄存器中。
- /* clear the A/D interrupt flag for safe */
- ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
- for(u32ChannelCount = 0; u32ChannelCount < 4; u32ChannelCount++)
- {
- i32ConversionData = ADC_GET_CONVERSION_DATA(ADC, u32ChannelCount);
- printf("Conversion result of channel %d: 0x%X (%d)\n", u32ChannelCount, i32ConversionData, i32ConversionData);
- }
- /* Wait conversion done */ ADC_ADF_INT: Convert complete interrupt flag
- while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));
- /* Stop A/D conversion */
- ADC_STOP_CONV(ADC);
- for(u32ChannelCount = 0; u32ChannelCount < 4; u32ChannelCount++)
- {
- i32ConversionData = ADC_GET_CONVERSION_DATA(ADC, u32ChannelCount);
- printf("Conversion result of channel %d: 0x%X (%d)\n", u32ChannelCount, i32ConversionData, i32ConversionData);
- }
- /* clear the A/D interrupt flag for safe */
- ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
-
-
-
- //关闭ADC
- /* Disable ADC module */
- ADC_Close(ADC);
- /* Disable ADC IP clock */
- CLK_DisableModuleClock(ADC_MODULE);
- /* Disable External Interrupt */
- NVIC_DisableIRQ(ADC_IRQn);
|