s5pv210 AD转换

发布者:DreamyMoon最新更新时间:2024-12-05 来源: cnblogs关键字:s5pv210  AD转换  模拟信号 手机看文章 扫描二维码
随时随地手机看文章

1:ADC:Analog-to-Digital Converter,模拟信号数字信号,自然界一般为模拟信号,而SoC需要数字信号,所以之间通信需要ADC。

2:转换原理:

以逐次逼近式AD转换为例:

 

这里以8位为例,而S5pv210SoC是可选10bit、12bit;

(1)  首先发出“启动信号”信号S。当S由高变低时,“逐次逼近寄存器SAR”清0,DAC输出Vo=0,“比较器”输出1。当S变为高电平时, “控制电路”使SAR开始工作。
(2)  SAR首先产生8位数字量的一半,即10000000B,试探模拟量的Vi大小,若Vo>Vi,“控制电路”清除最高位,若Vo(3)  在最高位确定后,SAR又以对分搜索法确定次高位,即以低7位的一半y1000000B(y为已确定位) 试探模拟量Vi的大小。在bit6确定后,SAR以对分搜索法确定bit5位,即以低6位的一半yy100000B(y为已确定位) 试探模拟量Vi的大小。重复这一过程,直到最低位bit0被确定。

(4)  在最低位bit0确定后,转换结束,“控制电路”发出“转换结束”信号EOC。该信号的下降沿把SAR的输出锁存在“缓冲寄存器”里,从而得到数字量输出。 从转换过程可以看出: 启动信号为负脉冲有效。 转换结束信号为低电平。

例如满量程应该是5V,所以,第一次DA输出2.5V,输入电压与2.5V比较,输入电压大,故而取2.5V-5V之间,即最高位保留1。然后在新的范围内取中间电压,即3.75V,依此类推。。。。 

3:S5pv210的ADC特性

(1)  精度10bit/12bit;

(2)  最大转换速率1MSPS

(3)  模拟电压范围0-3.3

(4)  可设置普通AD模式(即TOUCH SCREEN触摸屏模式切换为普通AD模式)

3:AD工作时钟时钟频率

 

 

S5pv210的ADC时钟接在PCLC_PSYS总线上(PCLC_PSYS时钟总线频率为66MHz),一般设置分频器位65,对用的ADC时钟位1MHz,此时的转换速率为1/200KHz,

最大ADC时钟可设置为5MHz,对应的最大转换速率为1MSPS。

4:ADC数据可以通过轮询、中断两种方式来获取;采用中断模式的话,转换时间受中断历程的返回时间以及数据的读取时间影响而延迟。采用轮询方式,只要访问状态寄存器TSADCCONn,

即可知道是否转换完成。转换完成以后读取TSDATXn、TSDATYn两个寄存器的值即可。

5:s5pv210的10个ADC引脚AIN[0]~AIN[9]分别对应XadcAIN[0]~XadcAIN[9]引脚

6:常用寄存器

TSADCCON0:  

        bit16设置AD转换精度,10bit、12bit可选;

        bit15只读,状态寄存器,查看是否转换结束;

        bit14预分频器开关,设置为1;

        bit13:6分频倍率,如要设置3.3MHz,可设置为19,66/19+1=3.3,最大设置频率为5MHz,所以此位最小值为:13

        bit2设置为普通模式即可

        bit1是否开启read star模式,read star模式意思是只要读取AD转换后的寄存器数据,即重新开始AD转换,使用这种模式第一次读数据要丢掉;

        bit0开启AD转换,如果设置了read star模式,此位无效;

 TSCONn:touch screen控制寄存器。

TSDATXn:数据寄存器

        bit14查看输出数据位ADC 还是TOUCH SCREEN

        bit11:0为转换后的数据

TSDATYn:数据寄存器 

        bit14查看输出数据位ADC 还是TOUCH SCREEN

        bit11:0为转换后的数据

 CLRINADCn:清中断写入任意一个值就可以;ADC Interrupt Clear Register

ADMUX寄存器      


7:编程


#define TSADCCON0        0xE1700000

#define    TSCON0            0xE1700004

#define TSDATX0            0xE170000C

#define TSDATY0            0xE1700010

#define CLRINTADC0        0xE1700018

#define ADCMUX            0xE170001C



#define _REG_TSADCCON0        *(unsigned int*)0xE1700000

#define    _REG_TSCON0            *(unsigned int*)0xE1700004

#define _REG_TSDATX0        *(unsigned int*)0xE170000C

#define _REG_TSDATY0        *(unsigned int*)0xE1700010

#define _REG_CLRINTADC0        *(unsigned int*)0xE1700018

#define _REG_ADCMUX            *(unsigned int*)0xE170001C


static void adc_init(void)

{

    _REG_TSADCCON0 |= (1 << 16);            //设置精度为12bit

    _REG_TSADCCON0 |= (1 << 14);            //使能presaler

    _REG_TSADCCON0 &= ~(0xFF << 6);            //设置时钟

    _REG_TSADCCON0 |= (65 << 6);

    _REG_TSADCCON0 &= ~(1 << 2);            //standby为normal模式

    _REG_TSADCCON0 &= ~(1 << 1);            //read_start disable

    

    _REG_ADCMUX &= ~(0xF << 0);                //设置mux开关为ACD1

}

static void delay_1(void){

    volatile int x, y;

    for(x=0; x<5000; x++) {

        for(y=0; y<1000; y++)

            ;

    }

}

void adc_test(void)

{

    unsigned int valx, valy;

    adc_init();

    

    while(1) {

        

        //开始ADC转换

        _REG_TSADCCON0 |= (1 << 0);

        

        //读取状态位,是否转换完毕,如果bit15位0的话,一直读取

        while (!(_REG_TSADCCON0 & (1 << 15))) {

            0;

        }

        

        //读取ADC转换后的数据

        valx = _REG_TSDATX0;

        valy = _REG_TSDATY0;

        

        printf('x:bit14 = %dn', (valx & (1 << 14)));

        printf('x:bit11-0 = %dn', (valx & (0xFFF << 0)));

        printf('y:bit14 = %dn', (valy & (1 << 14)));

        printf('y:bit11-0 = %dn', (valy & (0xFFF << 0)));

        delay_1();

    }

}


关键字:s5pv210  AD转换  模拟信号 引用地址:s5pv210 AD转换

上一篇:arm汇编伪指令详解
下一篇:S5PV210 | S5PV210 概述

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved