S3C2440 ADC详解
扫描二维码
随时随地手机看文章
S3C2440拥有八通道的十位ADC, 最大转换率为2.5MHz A/D转换器时钟下的500KSPS。A/D转换器支持片上采样-保持功能和掉电模式的操作。
八个通道中有四个通道适用于电阻屏的触摸屏触摸检测,另外四个是模拟输入,分别是A[0:3],
ADC的使用极其简单,选择时钟à选择通道à启动转换à转换完成
主要用到如下几个寄存器
负责选择时钟通道以及启动ADC
这里读取ADC的值
注意这一位,这说明转换完成读取的时候还可以触发转换,也就是相当于连续转换
Adc.c
#include"adc.h"//=====================================================================//名称:ADCSelect(intch,U32preScaler)//功能:选择转换通道,转换器预分频值设置//参数:ch:转换通道preScaler:预分频值//返回值:无//=======================================================================voidADCSelect(intch,u8preScaler){rADCCON=(1<<14)"(preScaler<<6)|(ch<<3);//选择通道,选择分频数启动转换}//=======================================================================//名称:ADEnable()//功能:采用置位使能方式启动AD转换,16次采样取平均值//参数:无//返回值:转换后的值//=======================================================================u16ADEnable(void){inti;intval=0;for(i=0;i<16;i++){rADCCON|=0x1;//使能ADC转换while(rADCCON&0x1);//判断使能ADC转换后被清零while(!(rADCCON&0x8000));//等待转换结束val+=(rADCDAT0&0x3ff);//读取ADC转换的值}val=val>>4;//计算ADC转换值returnval;}//=======================================================================//名称:ADRead()//功能:采用读控制器的方式启动AD转换//参数:无//返回值:转换后的值//=======================================================================u16ADRead(void){inti;intval=0;rADCCON|=0x2;//ADC转换通过读操作来启动for(i=0;i<16;i++){rADCCON|=0x1;//使能ADC转换while(rADCCON&0x1);//判断使能ADC转换后被清零while(!(rADCCON&0x8000));//等待转换结束val+=(rADCDAT0&0x3ff);//读取ADC转换的值}val=val>>4;//计算ADC转换值returnval;}
Adc.h
#ifndef__ADC_H#define__ADC_H#include"2440addr.h"#include"def.h"voidADCSelect(intch,u8preScaler);u16ADEnable(void);u16ADRead(void);#endif