| 
 
| ADC功能特性: 1、12bitADC转换结果。
 2、范围最大5V
 3、选择电压3.0V-5.5V参考电压2.5V-VADD
 4、8通道输入4个差动输入。
 5、800KHZ的采样频率1.25US的时间。
 6、最高20MHZADC工作频率。
 7、三种模式:单模式,单循环模式,连扫描模式。
 8、ADC启动:可以通过软件写ADST寄存器或者外部STADC
 9、转换结果:每一个通道转换结果在每个通道存着。
 10、转换结果可以同特别值比较,若相等可以产生中断。
 11、有自检模式可以减少误差。
 12、支持三个转换源:外部模拟电压、内部电压、内部温度传感器。
 
 ADC分频器原理
 
 
 ADC的模块框图
 
 
 单次转换原理:
 
 
 执行效果图
 
 
 
 下以程序是用单次ADC,把助学板的AD1就是可调电压转换过来,然后通过串口发出结果
 
 #include <stdio.h>
 #include "NUC1xx.h"
 #include "..\Driver\DrvGPIO.h"
 #include "..\Driver\DrvI2C.h"
 #include "..\Driver\DrvSYS.h"
 #include "..\Driver\DrvUART.h"
 void InitUART(void)
 {
 STR_UART_T sParam;
 /* Set UART0 Pin */
 DrvGPIO_InitFunction(E_FUNC_UART0);
 /* UART Setting */
 sParam.u32BaudRate   = 9600;
 sParam.u8cDataBits   = DRVUART_DATABITS_8;
 sParam.u8cStopBits   = DRVUART_STOPBITS_1;
 sParam.u8cParity   = DRVUART_PARITY_NONE;
 sParam.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES;
 /* Select UART Clock Source From 12Mhz*/
 DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);
 /* Set UART0 Configuration */
 DrvUART_Open(UART_PORT0, &sParam);
 }
 void InitADC(void)
 {
 
 /* Step 1. GPIO initial */
 GPIOA->OFFD|=0x00020000;  //the no.2 Disable digital input path
 SYS->GPAMFP.ADC1_AD12=1;  //Set ADC function
 
 /* Step 2. Enable and Select ADC clock source, and then enable ADC module */
 SYSCLK->CLKSEL1.ADC_S = 2; //Select 22Mhz for ADC
 SYSCLK->CLKDIV.ADC_N = 1; //ADC clock source = 22Mhz/2 =11Mhz;
 SYSCLK->APBCLK.ADC_EN = 1; //Enable clock source
 ADC->ADCR.ADEN = 1;   //Enable ADC module
 /* Step 3. Select Operation mode */
 ADC->ADCR.DIFFEN = 0;      //single end input
 ADC->ADCR.ADMD   = 0;      //single mode
 
 /* Step 4. Select ADC channel */
 ADC->ADCHER.CHEN = 0x02;
 
 /* Step 5. Enable ADC interrupt */
 ADC->ADSR.ADF =1;       //clear the A/D interrupt flags for safe
 ADC->ADCR.ADIE = 1;
 // NVIC_EnableIRQ(ADC_IRQn);
 
 /* Step 6. Enable WDT module */
 ADC->ADCR.ADST=1;
 }
 void Delay(int count)
 {
 while(count--)
 {
 //  __NOP;
 }
 }
 
 /*---------------------------------------------------------------------------------------------------------*/
 /*MAIN Function*/
 /*---------------------------------------------------------------------------------------------------------*/
 int main (void)
 {
 
 //uint32_t u32HCLK;
 char adc_value[15]="ADC Value:";
 UNLOCKREG();
 SYSCLK->PWRCON.XTL12M_EN = 1;
 SYSCLK->CLKSEL0.HCLK_S = 0;
 //u32HCLK = DrvSYS_GetHCLKFreq() * 1000;
 LOCKREG();
 InitADC();
 InitUART();
 
 
 
 while(1)
 {
 //printf(adc_value);
 while(ADC->ADSR.ADF==0);
 ADC->ADSR.ADF=1;
 printf(adc_value);
 printf("%d\n",ADC->ADDR[1].RSLT);
 Delay(20000);
 //printf(adc_value);
 ADC->ADCR.ADST=1;
 }
 }
 
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |