s5pv210开发与学习:1.18之ADC控制器学习

1.原理图

2.资料参考

数据手册相关内容见section 10_audio_etc----》7 ADC & TOUCH SCREEN INTERFACE

本章介绍ADC和触摸屏界面的功能和用法。
7.1 ADC和触摸屏界面概述
10位或12位CMOS模数转换器(ADC)包含10通道模拟输入。 它以5MHz的A / D转换器时钟,以1MSPS的最大转换速率将模拟输入信号转换为10位或12位二进制数字代码。 A / D转换器具有片上采样保持功能。 ADC支持低功耗模式。
触摸屏界面可以控制输入板(XP,XM,YP和YM)来获取外部触摸屏设备上的X / Y位置。 触摸屏接口包含三个主要模块,即触摸屏垫控制逻辑,ADC接口逻辑和中断生成逻辑。 触摸屏界面有两组,共享一个ADC。

7.2 ADC和触摸屏界面的主要功能
ADC和触摸屏界面包括以下功能:
    •分辨率:10位/ 12位(可选)
    •微分非线性误差:±1.0 LSB(最大值)
    •积分非线性误差:±4.0 LSB(最大值)
    •最大转换率:1 MSPS
    •低功耗
    •电源电压:3.3V
    •模拟输入范围:0〜3.3V
    •片内采样保持功能
    •普通转换模式
    •单独的X / Y位置转换模式
    •自动(顺序)X / Y位置转换模式
    •等待中断模式
    •IDLE,DIDLE,STOP和DSTOP模式唤醒源
    •两个触摸屏界面

7.3触摸屏界面操作
7.3.1框图ADC和触摸屏界面

7.4功能说明
7.4.1 A / D转换时间
当PCLK频率为66MHz,预分频器值为65时,总的12位转换时间如下。
    •A / D转换器频率。 = 66MHz /(65 + 1)= 1MHz
    •转换时间= 1 /(1MHz / 5cycles)= 1 / 200kHz = 5us
注意:此A / D转换器设计为以最大5MHz时钟工作,因此转换速率可以达到1MSPS。

7.4.2触摸屏界面模式
1.普通转换模式(AUTO_PST = 0,XY_PST = 0)
该模式的操作与AIN0〜AIN9相同。要初始化此模式,请设置TSADCCON0(ADC控制寄存器)和TSCONn(触摸屏控制寄存器)。应当关闭开关和上拉电阻(如果TSCON0和TSCON1设置为0x58,则所有开关都将关闭)。可以从TSDATX0(ADC转换数据X寄存器)中读出转换后的数据。
注意:TSADCCON1寄存器在正常转换模式下无用。因此,TSADCCON0寄存器的TSSEL位应为0。如果TSSEL位为0,则TSADCCON1寄存器将无意义。
2.单独的X / Y位置转换模式(AUTO_PST = 0,XY_PST =控制)
该模式包括两个状态,即X位置测量状态和Y位置测量状态。
操作X位置测量状态的步骤;
    −将“ 0x69”设置为TSCONn。
    (XY_PST = 1,AUTO_PST = 0,PULL_UP禁用,XP启用,XM启用,YP禁用,YM禁用)
    −通过设置TSADCCONn开始转换。
    − X位置转换的结束可以通过中断(INT_ADCn)进行通知。
    −从TSDATXn读出转换后的数据(X位置)。
操作Y位置测量状态的步骤;
    −将“ 0x9a”设置为TSCONn。
    (XY_PST = 2,AUTO_PST = 0,PULL_UP禁用XP禁用,XM禁用,YP启用,YM启用)
    −通过设置TSADCCONn开始转换。
    −可以通过中断(INT_ADCn)通知Y位置转换的结束。
    −从TSDATYn读取转换后的数据(Y位置)。

7.4.2.1触摸屏0 X / Y位置测量中的引脚条件

7.4.2.2触摸屏1 X / Y位置测量中的引脚条件

3.自动(顺序)X / Y位置转换模式(AUTO_PST = 1,XY_PST = 0)
操作自动(顺序)X / Y位置转换模式的步骤:
−将“ 0x5c”设置为TSCONn。
(XY_PST = 0,AUTO_PST = 1,PULL_UP禁用,XP禁用,XM禁用,YP禁用,YM禁用)
−通过设置TSADCCONn开始转换。
−触摸屏控制器转换X位置并将其写入TSDATXn。
−触摸屏控制器转换Y位置并将其写入TSDATYn。
−触摸屏界面产生中断(INT_ADCn)。 换句话说,仅发生INT_ADCn一次,不是两次。

4.等待中断模式(TSCONn [7:0] = 0xd3)
当触控笔向下或向上时,触摸屏控制器会生成一个中断信号(INT_PENn)。 TSCONn [7:0]的值应为0xd3,即上拉使能,XP禁用,XM禁用,YP禁用和YM启用。 触摸屏控制器生成中断信号(INT_PENn)后,必须清除等待中断模式(将0设置为XY_PST)。

7.4.2.3 触摸屏0等待中断模式下的引脚条件

7.4.2.4 触摸屏1等待中断模式下的引脚条件

7.4.3待机模式
当TSADCCON0寄存器中的TSSEL位为0且STANDBY位为1时,激活待机模式。 在这种模式下,A / D转换操作停止,TSDATXn和TSDATYn寄存器保持其值。

7.4.4两个触摸屏界面
触摸屏界面有两组,分别是触摸屏0的AIN [5]〜AIN [2]和触摸屏1的AIN [9]〜AIN [6]。XP,XM,YP和XP有单独的开关。 YM控制和单独的寄存器与两个触摸屏进行交互。 它们共享一个模拟数字转换器,因此应依次执行与两个触摸屏的接口。 TSADCCON0寄存器的TSSEL位用于选择将哪个触摸屏连接到ADC。 因此,在访问TSADCCON1之前,必须将TSSEL设置为“ 1”。 同样,在访问TSADCCON0之前,必须将TSSEL设置为“ 0”。
当TSSEL位为“ 0”时,禁止访问TSADCCON1位;当TSSEL位为“ 1”时,也禁止访问TSADCCON0位(除了TSSEL)。 始终允许访问TSSEL位。

编程说明
1.可以通过中断或轮询方法访问经过A / D转换的数据。 使用中断方法
由于中断服务程序的返回时间和数据访问时间,从A / D转换器开始到转换数据读取的总转换时间可能会延迟。 使用轮询方法,要确定TSDATXn或TSDATYn寄存器的读取时间,请检查TSADCCONn [15]-转换结束标志-位。
2. A / D转换可以通过不同的方式激活。 TSADCCONn [1]之后-将A / D读取转换开始模式设置为1。读取转换后的数据时,A / D转换同时开始。
3.如果在IDLE,DIDLE,STOP和DSTOP模式下将INT_PEN中断用作唤醒源,则应将XY_PST位(TSCONn [1:0])设置为等待中断模式(2b'11)。 UD_SEN位(TSCONn [8])确定笔的笔唤醒或笔笔唤醒。

7.5 ADC和触摸屏界面输入时钟框图

7.6 I/O描述

7.7 寄存器描述--->7.7.1寄存器映射

7.7.1.1 ADC控制寄存器(TSADCCONn)

TSADCCONn Bit 描述 初始状态
TSSEL [17]

触摸屏选择
0 = 触摸屏0 (AIN2~AIN5)
1 = 触摸屏1 (AIN6~AIN9)
This bit exists only in TSADCCON0.
注:当TSSEL位为0时,禁止访问TSADCCON1位;

当TSSEL位为1时,禁止访问TSADCCON0位(除了TSSEL)。

始终允许访问TSSEL位。

0
RES [16] ADC 输出分辨率选择
0 = 10bit A/D conversion
1 = 12bit A/D conversion
0
ECFLG [15] 转换结束标志(只读)
0 = A/D转换中
1 =  A/D转换结束
0
PRSCEN [14] A / D转换器预分频器使能
0 = Disable
1 = Enable
0
PRSCVL [13:6]

A / D转换器预分频器值
Data value: 5 ~ 255
The division factor is (N+1) when the prescaler value is N. For
example, ADC frequency is 3.3MHz if PCLK is 66MHz and the
prescaler value is 19.
注意:该A / D转换器设计为以最大5MHz时钟工作,因此应设置预分频器值,

以使最终时钟不超过5MHz。

0xFF
Reserved [5:3] Reserved 0
STANDBY [2] Standby mode select
0 = Normal operation mode
1 = Standby mode
注意:在待机模式下,应禁用预分频器以减少更多的泄漏功耗。
1
READ_ START [1] A/D conversion start by read
0 = Disables start by read operation
1 = Enables start by read operation
0
ENABLE_START [0] A/D conversion starts by enable.
If READ_START is enabled, this value is not valid.
0 = No operation
1 = A/D conversion starts and this bit is automatically cleared
after the start-up.
0

7.7.1.2 触摸屏控制寄存器(TSCONn)
7.7.1.3 ADC延迟寄存器(TSDLYn)
7.7.1.4 ADC转换数据X寄存器(TSDATXn)
7.7.1.5 ADC转换数据Y寄存器(TSDATYn)
7.7.1.6 Pen状态寄存器(TSPENSTATn)
7.7.1.7 ADC中断清除寄存器(CLRINTADCn)
7.7.1.8 ADC通道选择寄存器(ADCMUX)
7.7.1.9 Pen中断清除寄存器(CLRINTPENn)

3.代码

// 初始化ADC控制器的函数
static void adc_init(void)
{
	rTSADCCON0	|= (1<<16);		// resolution set to 12bit
	rTSADCCON0	|= (1<<14);		// enable clock prescaler
	rTSADCCON0 	&= ~(0xFF<<6);
	rTSADCCON0	|= (65<<6);		// convertor clock = 66/66M=1MHz, MSPS=200KHz
	rTSADCCON0 	&= ~(1<<2);		// normal operation mode
	rTSADCCON0 	&= ~(1<<1);		// disable start by read mode
	
	rADCMUX		&= ~(0x0F<<0);	// MUX选择ADCIN0
}

// 测试ADC,完成的功能就是循环检测ADC并得到ADC转换数字值打印出来
void adc_test(void)
{
	unsigned int val = 0;
	
	adc_init();
	
	while (1)
	{
		// 第一步:手工开启ADC转换
		rTSADCCON0	|= (1<<0);
		// 第二步:等待ADC转换完毕
		while (!(rTSADCCON0 & (1<<15)));
		
		// 第三步:读取ADC的数字值
		// 第四步:处理/显示数字值
		val = rTSDATX0;
		printf("x: bit14 = %d.\n", (val & (1<<14)));
		printf("x: adc value = %d.\n", (val & (0xFFF<<0)));
		
		val = rTSDATY0;
		printf("y: bit14 = %d.\n", (val & (1<<14)));
		printf("y: adc value = %d.\n", (val & (0xFFF<<0)));

		// 第五步:延时一段
		delay();
	}	
}

4.拓展

1.13.1.ADC的引入
1.13.1.1、什么是ADC
(1)ADC:analog digital converter,AD转换,模数转换(也就是模拟转数字)
(2)CPU本身是数字的,而外部世界变量(如电压、温度、高度、压力···)都是模拟的,所以需要用CPU来处理这些外部的模拟变量的时候就
需要做AD转换。

1.13.1.2、为什么需要ADC
(1)为了用数字技术来处理外部的模拟物理量。

1.13.1.3、关于模拟量和数字量
(1)模拟的就是连续的,现实生活当中的时间、电压、高度等都是模拟的(连续分布的,划分的话可以无限的更小划分)。模拟量反映在数学
里面就是无限小数位(从0到1之间有无数个数)
(2)数字的就是离散的,离线的就是不连续的。这种离散处理实际上是从数学上对现实中的模拟量的一种有限精度的描述。数字化就是离散化,
就是把连续分布的模拟量按照一定精度进行取点(采样)变成有限多个不连续分布的数字值,就叫数字量。
(3)数字化的意义就在于可以用(离散)数学来简化描述模拟量,这东西是计算机技术的基础。
(4)计算机处理参量的时候都是数字化的,计算机需要数字化的值来参与运算。如果系统输入参数中有模拟量,就需要外加AD转换器将模拟量
转成数字量再给计算机。

1.13.1.4、有AD自然就有DA
(1)AD是analog to digital,DA自然就是digital to analog,数字转模拟。
(2)纯粹用cpu是不可能实现数字转模拟,因为cpu本身就是数字的。使用一些(具有一些积分或微分效果的)物理器件就可实现数字转模拟。
(3)数字转模拟的作用。譬如可以用来做波形发生器。


1.13.2.ADC的主要相关概念
1.13.2.1、量程(模拟量输入范围)
(1)AD转换器是一个电子器件,所以他只能输入电压信号。其他种类的模拟信号要先经过传感器(Sensor)的转换变成模拟的电压信号然后才
能给AD。
(2)AD输入端的模拟电压要求有一个范围,一般是0~3.3V或0~5V或者是0~12V等等。模拟电压的范围是AD芯片本身的一个参数。
实际工作时给AD的电压信号不能超过这个电压范围。

1.13.2.2、精度(分辨率resolution)
(1)AD转换输出的数字值是有一定的位数的(譬如说10位,意思就是输出的数字值是用10个二进制位来表示的,这种就叫10位AD)。这个位数
就表示了转换精度。
(2)10位AD就相当于把整个范围分成了1024个格子,每个格子之间的间隔就是电压的表示精度。加入AD芯片的量程是0~3.3V,则每个格子代表
的电压值是3.3V/1024=0.0032265V。如果此时AD转换后得到的数字量是447,则这个数字量代表的模拟值是:447×0.0032265V=1.44V。
(3)AD的位数越多,则每个格子表示的电压值越小,将来算出来的模拟电压值就越精确。
(4)AD的模拟量程一样的情况下,AD精度位数越多精度越高,测出来的值越准。但是如果AD的量程不一样。譬如2个AD,A的量程是0~50V,
B的量程是0~0.5V,A是12位的,B是10位的,可能B的精度比A的还要高。(A的精度:50/1024=0.04883,B的精度:0.5/4096=0.000122)

1.13.2.3、转换速率(MSPS与conventor clock的不同)
(1)首先要明白:AD芯片进行AD转换是要耗费时间的。这个时间需要多久,不同的芯片是不一样的,同一颗芯片在配置不一样(譬如说精度配置
为10位时时间比精度配置为12位时要小,譬如说有些AD可以配转换时钟,时钟频率高则转换时间短)时转换时间也不一样。
(2)详细的需要时间可以参考数据手册。一般数据手册中描述转换速率用的单位是MSPS(第一个M是兆,S是sample,就是采样;PS就是
per second,总的意思就是兆样本每秒,每秒种转出来多少M个数字值)
(3)AD工作都需要一个时钟,这个时钟有一个范围,我们实际给他配置时不要超出这个范围就可以了。AD转换是在这个时钟下进行的,时钟的
频率控制着AD转换的速率。
注意:时钟频率和MSPS不是一回事,只是成正比不是完全相等。譬如S5PV210中的AD转换器,MSPS = 时钟频率/5

1.13.2.4、通道数
(1)AD芯片有多少路analog input通道,代表了将来可以同时进行多少路模拟信号的输入。
发布了56 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/I_feige/article/details/105366456
今日推荐