目录
一、模数转换器简述
1.1.简述
S3c2440有一个10-bit的CMOS ADC 模数转换器,支持8个模拟通道输入,10位的分辨率(1024个比较器),最高速度可达500KSPS(500 千次/每秒)。
量程:3.3v
精度:10位
转换速率:500KSPS
1.2.转换过程
AD转换过程:采样 、 保持、量化 、 编码
1.3. ADC类别
模拟ADC,包含了2部分功能,一部分是触屏功能,另一部分就是普通ADC功能,分别可以产生INT_TC和INT_ADC 两个中断。8个AIN模拟输入(A[3:0],YM,YP,XM,XP)通过一个8路模拟开关MUX进行通道片选。 ADC模块共有20个寄存器。对于普通ADC转换,使用ADCCON 和 ADCDAT0即可完成控制。ADCCON用于控制设置,ADCDAT0保存了转换结果。
二、普通ADC转换的实现
如图,通过控制可变电阻的电阻值来模拟不同电压ADC转换的过程。
2.1.设置ADC控制寄存器
/*ADC初始化 --- 模数转换控制器*/
void init_adc(void)
{
ADCCON |= (1 << 14);
ADCCON &= ~(0xff << 6);
ADCCON |= (49 << 6);
ADCCON &= ~(0x7 << 3);
ADCCON &= ~(0x1 << 2);
ADCCON |= (0x1 << 1);
}
2.2. 读取ADC转换数据寄存器
读取前需要等待转结束
/*读取数据*/
unsigned short adc_read(void)
{
//读取数据,自动转换
unsigned short data = ADCDAT0;
while(!(ADCCON & (1 << 15))); // 等待结束再读取
data = ADCDAT0 & 0x3ff;
return data;
}
三、总结
强调一下,预分频时的值会默认+1,防止设置0造成不好的结果;还有就是ADC控制寄存器的设置中,如果选择了使能读启动操作,那么就不需要设置AD转换启动且此位置在启动后被清零;读取ADC转换数据存储器的值时,一定要等待ADC转换结束。