第八章ADC和触摸屏接口与应用.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 ADC 触摸屏 接口 应用
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,8,章,ADC,和触摸屏接口与应用,2,嵌入式系统中的信号测量一般都会用到,ADC,,,ADC,测量作为嵌入式系统开发设计中不可缺少的一个部分存在于各种测量装置中。在,ARM Cortex-A8,中,触摸屏接口也要用到相应的,ADC,口来进行相应的工作,因此,对于嵌入式开发人员而言,,ADC,的学习是很重要的。,ADC,工作原理。,触摸屏结构和工作原理。,触摸屏控制实例。,本章内容:,8.1 ADC,工作原理,ADC,是模拟信号源和,CPU,之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。在工业控制和数据采集及许多其他领域中,,A/D,转换是不可缺少的。,A/D,转换器的类型有逐位比较型、积分型、计数型、并行比较型、电压,-,频率型,应主要根据使用场合的具体要求,安装转换速度、精度、价格、功能和接口条件等因素来决定选择何种类型。常用的,AD,转换器有以下两种。,1.,双积分的,AD,转换器,双积分式也称为二重积分式,其实质是测量和比较连个积分的时间,一个是对模拟输入电压积分的时间,此时间往往是固定的;另一个是以充电后的电压为初值,对参考电压反向积分,积分电容被放电至零所需的时间。模拟输入电压与参考电压之比,等于上述两个时间之比。,双积分的,AD,转换器,由于双积分型,AD,转换是测量输入电压在,T0,时间内的平均值,所以对常态干扰有很强的抑制作用,尤其对正负波形对称的干扰信号,抑制效果更好。,双积分型的,AD,转换器电路简单,抗干扰能力强,精度高,这是突出的优点。但转换速度比较慢,常用的,AD,转换芯片的转换时间为毫秒级。因此适用于模拟信号变换缓慢,采样速率要求较低,而对精度要求较高,或现场干扰较严重的场合,例如,在数字电压表中长被采用。,2.,逐次逼近型的,AD,转换器,逐次逼近型的,AD,转换器,其应用比积分型更为广泛,主要有逐次逼近寄存器,SAR,、,DA,转换器、比较器,以及时序和控制逻辑等部分组成。它的实质是逐次把设定的,SAR,寄存器中的数字量经,DA,转换后得到电压与待转换模拟电压进行比较。比较时,先用,SAR,的最高位开始,逐次确定各位的数码影视“,1”,还是“,0”,,其工作过程如下:,转换前,先将,SAR,寄存器各位清零。转换开始时,控制逻辑电路先设定,SAR,寄存器的最高位为“,1”,,其余位为,0,,此试探值经,DA,转换成,Vc,,然后将,Vc,与模拟输入电压,Vx,比较,如果,VxVc,,说明,SAR,最高位的“,1”,应予保留;如果,VxV c,,说明,SAR,该位应予清零。然后对,SAR,次高位置,1,,依上述方法进行,DA,转换和比较。如此重复上述过程,直至确定,SAR,寄存器的最低位为止。过程结束后,状态线改变状态,表名已完成一次转换。,最后,逐次逼近寄存器,SAR,中的内容就是与输入模拟量相对应的二进制数字量。显然,AD,转换器的位数,N,决定于,SAR,的位数和,DA,的位数,转换结果能否准确逼近模拟信号,主要取决于,SAR,和,DA,的位数。位数越多,越能准确逼近模拟量,但转换所需的时间也越长。,逐次逼近型,AD,转换器特点,:转换速度较快,在,1-100us,以内;分辨率可以达,18,位,特别适用于工业控制系统。转换时间固定,不随输入信号的变化而变化;抗干扰能力相对积分型的差。,8.2,触摸屏结构和工作原理,触摸屏作为一种最新的计算机输入设备,是目前最简单、方便、自然的一种人机交互方式。触摸屏应用领域非常广阔,主要是公共信息的查询,如电信局、税务局、银行、电力等部门的业务查询;城市街头的信息查询;此外也常用于领导办公、工业控制、军事指挥、电子游戏、点歌点菜、多媒体教学、房地产预售等。现在,触摸屏已经走入家庭。,随着城市向信息化方向发展和电脑网络在国民生活中的渗透,信息查询都已用触摸屏实现,即显示内容可触摸的形式出现。,8.2.1,触摸屏的工作原理,按照触摸屏的工作原理和传输信息的介质,分为四类:分别为电阻式、电容式、红外线式和表面声波式。,1.,电阻式触摸屏,电阻式触摸屏是利用压力感应进行控制,其主要部分是一块玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层。,当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发送变化,在,X,和,Y,两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触器并计算出(,X,Y,)的位置。,2.,电容式触摸屏,电容式触摸屏是利用人体的电流感应进行工作的。电容式触摸屏是一块四层复合玻璃屏,玻璃层的内表面和夹层个涂油一层,ITO,,最外层是一薄层矽土玻璃保护层,夹层,ITO,涂层作为工作面,四个角上引出四个电极,内层,ITO,为屏蔽层以保证良好的工作环境。,电容触摸屏的透光率和清晰度优于四线电阻屏,当然还不能和表面声波屏与五线电阻屏相比。电容屏反光严重,而且触摸屏对各波长光的折光率 不均匀,存在色彩失真的问题,由于光线在各层间的反射,还造成图像字符的模糊。,电容屏更主要的缺点是漂移,当环境温度、湿度改变时,环境电场发生改变时,都会引起电容屏的漂移,造成触摸点判断不准确。例如,开机后显示器温度上升会造成漂移,用户触摸屏幕的同时另一只手或身体一侧靠近显示器会漂移;电容触摸屏附近较大的物体搬移后会漂移,触摸时如果有人围过来观看也会引起漂移。电容屏的漂移原因属于技术上的先天不足,环境电势面虽然与电容触摸屏离得很远,却比手指头面积大得多,它们会直接影响触摸位置的测定。,3.,红外线式触摸屏,红外线式触摸屏是利用,X,、,Y,方向上密布的红外线矩阵来检测并定位用户的触摸。红外线式触摸屏在显示器的前面安装一个电路板外框,电路板在屏幕四边排布红外线发射管和红外接收管,一一对应形成横竖两条红外线,因而可以判断出触摸点在屏幕的位置。任何触摸物理都可改变触电上的红外线而实现触摸屏操作。,早期观念上,红外线式触摸屏存在分辨率低、触摸方式受限制和易受环境干扰而误动作等技术上的局限,因而一度淡出过市场。此外第二代红外屏部分解决了抗光干扰的问题,第三代和第四代在提升分辨率和稳定性能上也有所改进,但都没有在关键指标或综合性能上有质的飞跃。但是,了解触摸屏技术的人都知道,红外线式触摸屏不受电流、电压和静电干扰,适宜恶劣的环境条件,红外技术是触摸屏产品最终的发展趋势。采用声学和其他材料学技术的触摸屏都有其难以逾越的屏障,如单一传感器的受损、老化,触摸界面怕受污染、破坏性使用,维护繁琐等问题。,红外触摸屏只要真正实现了高稳定性能和高分辨率,必将替代其他技术产品而成为触摸屏市场主流。,4.,表面声波式触摸屏,表面声波触摸屏的触摸屏部分可以是一块平面、球面或是柱面的玻璃平板,安装在,CRT,、,LED,、,LCD,或者等离子显示器屏幕的前面。玻璃屏的左上角和右下角各固定了竖直和水平方向的超声波发射换能器,右上角则固定了两个相应的超声波接收换能器。环境屏的四个周边则刻有,45,度角由疏到密间隔非常精密的反射条纹。表面触摸屏的工作原理如图所示。,以右下角的,X,轴发射换能器为例,发射换能器把控制器通过触摸屏电缆送来的电信号转化为声波能量向左方表面传递,然后由玻璃板下边的一组精密反射条纹把声波能量反射成向上的均匀面传递,声波能量经过屏体表面,再由上边的反射条纹聚成向右的线传播给,X,轴的接收换能器,接收换能器将返回的表面声波能量变为电信号。当发射换能器发射一个窄脉冲后,声波能量历经不同途径到达接收换能器,走最右边的最早到达,走最左边的最晚到达,早到达的和晚到达的这些声波能量加成一个较宽的波形信号,不难看出,接收信号集合了所有在,X,轴方向历经长短不同路径回归的声波能量,它们在,Y,轴走过的路程是相同的。但在,X,轴上,最远的比最近的多走了两倍,X,轴最大距离。因此这个波形信号的时间轴反映各原始波形叠加前的位置,也就是,X,轴坐标。,表面式波式触摸屏的优点,是清晰度较高,透光率好;高度耐久,抗刮伤性良好(相对与电阻、电容等有表面度膜);反应灵敏;不受温度、湿度等环境因素影响;分辨率高,寿命长;透光率高(,92%,),能保持清晰透亮的图像质量;没有漂移,只需安装时一次校正;有第三轴(即重力轴)响应,目前在公共场所使用较多。,8.3 S5PV210,中的触摸屏接口,S5PV210,的,CMOS,魔术转换器可以接收,10,个通道的模拟信号输入,并将它们转换为,10,位或,12,位的二进制数据。在,5MHZ,的,AD,转换时钟下,最大的转换速率可达到,1MSPS,(每秒采样的次数)。,ADC,支持低功耗模式。,S5PV210,的触摸屏接口可以控制输入引脚(,XP,、,XM,、,YP,和,YM,)来获得外部触摸屏设备上的,X,、,Y,位置。触摸屏接口包括三个主要模块,及触摸屏控制逻辑、,ADC,接口逻辑和中断生成逻辑;有两套触摸屏接口,共享一个,ADC,。,S5PV210,的,ADC,和触摸屏接口具有以下特征。,分辨率:,10,位,/12,位(可选),微分非线性误差:,1LSB,(最大),积分非线性误差:,4.0LSB,(最大)。,最大:,1MSPS,转换率。,低功耗。,3.3V,电源电压。,模拟输入范围为,0-3.3V,。,芯片采样和保持功能。,正常模式转换。,单独的,X,、,Y,位置转换模式。,自动的,X,、,Y,位置转换模式。,等待中的模式。,IDLE,、,DiDLED,、,STOP,和,DSTOP,模式唤醒源。,两个触摸屏接口。,图,S5PV210,的,ADC,和触摸屏接口结构,8.3.1 ADC,工作模式,(,1,)普通转换模式。用于一般的,AD,转换,不用于触摸屏。,(,2,)分离的,X,、,Y,坐标转换模式。分两步进行,X,、,Y,坐标转换,其转换结果分别存于,TSDATXn,和,TSDATYn,中,并且均会产生,INT_ADC,中断请求。,(,3,)连续,X,、,Y,坐标转换模式。,X,坐标转换结束后自动启动,Y,坐标转换,其转换结果分别存于,TSDATXn,中和,TSDATYn,中,并且会产生,INT_ADC,中断请求。,(,4,)等待中断转换模式。在该模式下,转换器等待使用者按压触摸屏,一旦触摸屏被按压,则产生,INT_ADC,触摸屏中断请求。,8.3.2,触摸屏接口模式,当,PCLK,频率为,66MHZ,和预分频器值为,65,,总共,12,位转换时间如下:,AD,转换器频率,=66 MHz/(65+1)=1 MHz,转换时间,=1/(1 MHz/5 cycles)=1/200 kHz=5 us,注意,这里的,AD,转换器设计在最大,5MHz,时钟下工作,所以转换率最高达到,1 MSPS,。触摸屏接口模式可以分为正常转换模式,分离,X,、,Y,坐标转换模式,自动(连续),X,、,Y,坐标转换模式,等待中断模式和备用模式五种。,1.,普通转换模式,在普通转换模式下,,AIN0-AIN9,的操作是相同的。初始化时,设置,ADC,控制寄存器,TSADCCON0,和触摸屏控制寄存器,TSCONn,,把所有的开关和下拉电阻关闭。转换后的数据可以从,ADC,转换数据,X,寄存器中读出。,注意:在普通转换模式下,,TSADCCON1,是不用的,2.,分离的,X,、,Y,坐标转换模式,这种模式包含两种状态,即,X,坐标测量状态和,Y,坐标测量状态。,X,坐标测量状态。,X,坐标测量状态操作步骤:,TSCONn,的值设为,0 x69.,TSADCCONn,设为开始转换。,X,坐标转换完成后产生中断请求。,从,TSDATXn,中读出转换后的,X,坐标。,Y,坐标转换操作步骤与,X,坐标类似,不同的是,,TSCONn,的值应设为,0 x9a,。,3.,连续,X,、,Y,坐标转换模式,将,TSCONn,的值设为,0 x5c,启动该模式,,X,坐标转换结束后自动启动,Y,坐标转换,其转换结果分别存于,TSDATXn,和,TSDATYn,中,并且会产生,INT_ADC,中断请求。,4.,等待中断转换模式,当笔尖落下时触摸屏控制器产生中断(,INT_TC,)信号。,TSCON7:0,的值应设为,0 xd3,此时,下拉电阻激活,,XP,禁用,,XM,激活。,触摸屏控制器产生中断信号后,必须清除等待中断模式。,5.,备用模式,当,TSADCCON0,的,TSSEL,位为,0,、,STANDBY,位为,1,时,备用模式激活。在此模式下,,AD,转换操作停止,,TSDATXn,和,TSDATYn,寄存器保留先前的转换数据。,进行编程时注意:(,1,),AD,转换的数据可以通过中断或查询的方式来访问。,(,2,)提供另外的开启,AD,转换的方法。,(,3,)如果在,IDLE,、,DIDLE,、,STOP,和,DSTOP,模式下使用,INT_PEN,中断作为唤醒源,,TSCONn,的,XY_PST,位应该设为等待终端模式,即,11,。,8.4,硬件连接,触摸屏硬件连接如图:,触摸屏与,CPU,连接的引脚功能,:,触摸屏工作原理:,测量,X,坐标时,从,XP,输出地电压给,X+,端,从,XM,输出的地电压给,X-,端;从,YP,输入按压点电压。测量,Y,坐标时,从,YP,输出低电压给,Y+,端,从,YM,输出的地电压给,Y-,端;从输入按压点电压。,8.5 ADC,及触摸屏接口特殊寄存器,以下讲解以,TS0,为例,,TS1,的设置与,TS0,类似,详细可参看,S5pv210,数据手册。,1.ADC,控制寄存器,TSADCCON0,ADC,控制寄存器,TSADCCON0,是可以进行读写的寄存器,地址为,0 xE170_0000,,复位值为,0 x0000_3FC4.,在这个寄存器中,可以设置选择接入的触摸屏(,0/1,),还可以设定转换值的位数(,10/12,位)。,注意,(,1,)当等待触摸屏中断时,,XP_SEN,位应该置,1,且,PULL_UP,位应该置,0.,(,2,)仅在自动连续,X,、,Y,坐标转换中,,AUTO_PST,位应该设置为,1.,ADC,及触摸屏接口特殊寄存器,1.ADC,控制寄存器,TSADCCON0,ADC,控制寄存器,TSADCCON0,是可以进行读写的寄存器,地址为,0 xE170_0000,,复位值为,0 x0000_3FC4.,在这个寄存器中,我们可以设置选择接入的触摸屏(,0/1,),还可以设定转换值的位数(,10/12,位)。,ADCCON,寄存器的位定义详情如下图所示。,2 ADC,触摸屏控制寄存器,TSCON0,ADC,触摸屏控制寄存器,ADCTSC,是可以进行读写的寄存器,地址为,0 xE170_0004,,复位值为,0 x0000_0058.TSCON0,寄存器的位定义详情查看,S5PV210,的数据手册。,注意:,(,1,)当等待触摸屏中断时,,XP_SEN,位应该置,1,且,PULL_UP,为应该置,0.,(,2,)仅在自动连续,X,、,Y,坐标转换中,,AUTO_PST,位应该置,1.,3.ADC,延时寄存器,TSDLY0,ADC,开始延时寄存器,ADCDLY,是可以进行读写的寄存器,地址为,0 xE170_0008,,复位值为,0 x0000_00FF.ADCDLY,寄存器的位定义详情可参看数据手册。,注意:在,ADC,转换前,触摸屏使用晶振时钟,在,AD,转换中使用,PCLK(,最大,66MHZ),。,4.,ADC,转换数据,X,寄存器,TSDATX0,和,ADC,转换数据,Y,寄存器,TSDATY0,这两个寄存器是只读寄存器,地址分别是,0 xE170_000C,和,0 xE170_0010,,复位值不确定。,5.,模拟输入通道选择寄存器,ADCMUX,ADCMUX,是可以进行读写的寄存器,地址为,0 xE170_001C,复位值为,0 x0000_0000,。,注意:(,1,)当触摸屏不使用时,触摸屏接口(,AIN2-AIN9,)可以作为,ADC,模拟输入端口使用。,(,2,),TSADC,被设为分离,X,、,Y,坐标转换模式和连续,X,、,Y,坐标转换模式时,,SEL_MUX,的值是无效的。,8.6,触摸屏控制实例,AD,转换器的使用基本上还是通过配置寄存器来实现的,就实现方式而言,可以选择轮询或者中断的方式。,在轮询方式下,,程序配置完寄存器后,需要不断地查询,AD,转换的状态寄存器以确定转换是否完成,然后将转换得到的数据进行输出显示。这种方式效率十分低,但是对于低速采集系统(温度、直流电压测量系统)来说这样做不仅简单,而且也能达到要求。,在中断模式下,,当采集使能位使能后,一旦转换完成系统就会进入中断模式,这时就可以获取转换数据。当采集一定频率的模拟信号时可以考虑使用这种方式。,下面来看看配置相关寄存器实现上述功能。,首先,完成寄存器的宏定义,程序代码如下,主要是,ADC,和触摸屏控制中的相关寄存器的地址的宏定义,以便在程序设计过程中对其的访问。,/,第三组矢量中断选择寄存器 快中断或普通中断模式 默认普通中断,#define VIC2INTSELECT *(volatile unsigned int*)0 xF220000C),#define VIC3INTSELECT *(volatile unsigned int*)0 xF230000C),/,第三组矢量中断使能寄存器,8,、,9,位为,ADC,触摸屏中断,#define VIC2INTENCLEAR *(volatile unsigned int*)0 xF2200014),#define VIC3INTENCLEAR *(volatile unsigned int*)0 xF2300014),#define VIC2INTENABLE *(volatile unsigned int*)0 xF2200010),#define VIC3INTENABLE *(volatile unsigned int*)0 xF2300010),#define VIC3VECTADDR0 *(volatile unsigned int*)0 xF2300100),#define VIC3VECTADDR1 *(volatile unsigned int*)0 xF2300104),#define VIC3VECTADDR2 *(volatile unsigned int*)0 xF2300108),#define VIC3VECTADDR3 *(volatile unsigned int*)0 xF230010C),#define VIC3VECTADDR4 *(volatile unsigned int*)0 xF2300110),#define VIC3VECTADDR5 *(volatile unsigned int*)0 xF2300114),#define VIC3VECTADDR6 *(volatile unsigned int*)0 xF2300118),#define VIC3VECTADDR7 *(volatile unsigned int*)0 xF230011C),#define VIC3VECTADDR8 *(volatile unsigned int*)0 xF2300120),#define VIC3VECTADDR9 *(volatile unsigned int*)0 xF2300124),#define VIC3VECTADDR10 *(volatile unsigned int*)0 xF2300128),#define VIC3VECTADDR3 *(volatile unsigned int*)0 xF230010C),#define VIC3VECTADDR4 *(volatile unsigned int*)0 xF2300110),#define VIC3VECTADDR5 *(volatile unsigned int*)0 xF2300114),#define VIC3VECTADDR6 *(volatile unsigned int*)0 xF2300118),#define VIC2ADDRESS *(volatile unsigned int*)0 xF2200F00),#define VIC3ADDRESS *(volatile unsigned int*)0 xF2300F00),/UART,相关寄存器,#define GPA0CON *(volatile unsigned int*)0 xE0200000),#define ULCON0 *(volatile unsigned int*)0 xE2900000),#define UCON0 *(volatile unsigned int*)0 xE2900004),#define GFCON0 *(volatile unsigned int*)0 xE29000008),#define UTRSTAT0 *(volatile unsigned int*)0 xE2900010),#define UTXH0 *(volatile unsigned int*)0 x 0 xE2900020),#define URXH0 *(volatile unsigned int*)0 x 0 xE2900024),#define UBRDIV0 *(volatile unsigned int*)0 xE2900028),#define UDIVSLOT0 *(volatile unsigned int*)0 xE290002C),/ADC,相关寄存器,#define TSADCCON0 *(volatile unsigned int*)0 xE1700000),#define TSADCCON1 *(volatile unsigned int*)0 xE1701000),#define TSCON1 *(volatile unsigned int*)0 xE1701004),#define TSDLY1 *(volatile unsigned int*)0 xE1701008),#define TSDATX1 *(volatile unsigned int*)0 xE170100C),#define TSDATY1 *(volatile unsigned int*)0 xE1701010),#define TSPENSTAT1 *(volatile unsigned int*)0 xE1701014),#define CLRINTADC1 *(volatile unsigned int*)0 xE1701018),#define CLRINTPEN1 *(volatile unsigned int*)0 xE1701020),触摸屏实验的主流代码如下:,extern void key_isr(void)/,设置为外部可用标记,提供给,.s,文件使用,/UART0,初始化,void uart_init(),/,配置,GPA0_0,为,UART_0_RXD,/,配置,GPA0_1,为,UART_0_TXD,GPA0CON,GPA0CON|=0 x22;,ULCON0=0 x3|(02)(06)(06);,/,发送和接收引脚采用中断和轮询查询模式,正常发送,常规操作,时钟选择位,PCLK,UCON0=1|(12)|(010),/,禁止,FIFO,UFCON0=0;,/,波特率计算:,115200,UBRDIV0=34;,UDIVSLOT0=0 xDDDD;,void uart_send_byte(unsigned char byte),while(!(UTRSTAT0 /,等待发送缓冲区为空,UTXH0=byte;/,发送一字节数据,void uart_recv_byte(),while(!(UTRSTAT0 /,等待接收缓冲区有数据可读,return URXH0;/,接收一字节数据,void uart_send_string(char*str),char*p =str;,while(*p),uart_send_byte(*p+);,void uart_send_num(unsigned int sum),char unit,tens,bunds,thund;,unit=0+num%10;,tens=0+num/10%10;,hunds=0+num/100%10;,thund=0+num/1000%10;,Uart_send_byte(thund);,Uart_send_byte(hunds);,Uart_send_byte(tens);,Uart_send_byte(unit);,Void adc_init(),TSADCCON0|=1 17;,TSADCCON1=114|196|02;,TSDLY1=0XFFFF;,TSCON1=0 xd3;,Uart_send_string(“rinitadc finshn”);,Void irq_int(),VIC2INTENCLEAR|=0 x39;,VIC3INTENCLEAR|=0 x39;,VIC2INTSELECT|=(0 x39);,VIC3INTSELECT|=(0 x39);,VIC3INTENABLE|=0 x39;,Void key_handle(),uart_send_string(“test key_handle”);,VIC2ADDRESS=0;/,清中断向量寄存器,VIC3ADDRESS=0;,VIC3VECTADDR0=0 xffffffff;,VIC3VECTADDR1=0 xffffffff;,TSCON1=oxdc;/x/y,设置为自动转换,TSADCCON1|=1;,while(TSADCCON1,while(!TSADCCON1 /,判断是否结束转换,Uart_send_string(“rX:”);,Uart_send_num(TSDATX1,Uart_send_string(“Y:”);,Uart_send_num(TSDATY1,Uart_send_byte(“n”);,TSCON1=0 xd3;,Int main(),uart_init();,adc_init();,irq_init();,VIC3VECTADDR8=(int)key_isr;,VIC3VECTADDR9=(int)key_isr;,while(1);,return 0;,我们可以看到,这里调用了,Test_AdcTs(),函数,其具体代码如下:,Void Test_AdcTs(void),rADCDLY=50000;,rADCCON=(114)+(ADCPRS6);,Uart_printf(“nTouch Screen testn”);,rADCTSC=0 xd3;,pISR_ADC=(int)AdcTsAuto;,rINTMSK=BIT_ADC;,rINTSUBMSK=(BIT_SUB_TC);,Uart_Printf(“nPress any key to quit!n”);,Uart_Getch();,rINTSUBMSK|=BIT_SUB_TC;,rINTMSK|=BIT_ADC;,Uart_Printf(“Touch Screen is Finished!n”);,Start.S,文件代码如下:,.global _start,.global key_isr,_start:,ldr sp,=0 x40000000,ldr r0,=0 xE2700000,mov r1,#0,str r1,r0,msr r0,cpsr,bic r0,r0,#0 x00000080,msr cpsr,r0,bl main,halt:,b halt,key_isr:,;计算返回地址:,PC,的值等于当前执行的地址,+8,,当,CPU,正要执行某条指令(还未执行)时,,;被中断,这时这条刚要执行的指令的地址刚好为,PC-4.,sub lr,lr,#4,stmfd sp!,r0-r12,lr,bl key_handle,;恢复现场,ldmfd sp!,r0-r12,pc.,;,表示把,spsr,恢复到,cpsr,8.7,滑动变阻器滑动实例,本小节通过滑动变阻器和,ADC,的实例来进一步学习,ADC,的使用。,由电路图可以看到,,ADC,从该电路获取模拟数据的通道是,ADCIN1,,因此实现滑动变阻器的控制功能就是设置,ADC,的控制寄存器的,SEL_MUX,位为通道,ADCIN1,。,首先编写一个,start.S,文件,对程序的入口进行定义。,.global _start ,声明一个全局的标号,.global key_isr,_start:,设置栈,以调用,c,函数,ldr sp,=0 x40000000,bl uart_init,bl adc_init,开总中断,mrs r0,cpsr ,读取,cpsr,寄存器中的值到,r0,bic r0,r0,#0 x00000080 ,清除第,7,位,,IRQ,中断禁止位,写,0,使能,IRQ,msr cpsr,r0 ;,把修改好的,r0,的值重新协会,cpsr,bl main ;,跳转到,C,函数去执行,halt:,b halt,为了更好的观察,AD,转换的效果,可使用,UART,通信将转换结果输出到终端上。程序如下:,#define GPA0CON *(volatile unsigned int*)0 xE0200000),#define ULCON0 *(volatile unsigned int*)0 xE2900000),#define UCON0 *(volatile unsigned int*)0 xE2900004),#define UFCON0 *(volatile unsigned int*)0 xE2900008),#define UTRSTAT0 *(volatile unsigned int*)0 xE2900010),#define UTXH0 *(volatile unsigned int*)0 xE2900020),#define URXH0 *(volatile unsigned int*)0 xE2900024),#define UBRDIV0 *(volatile unsigned int*)0 xE2900028),#define UDIVSLOT0 *(volatile unsigned int*)0 xE290002C),/*,*UART0,初始化,*,/,void uart_init(),/*,*,配置,GPA0_0,为,UART_0_RXD,*,配置,GPA0_1,为,UART_0_TXD,*/,GPA0CON,GPA0CON|=0 x22;/0b 00100010,/*8-bits/One stop bit/No parity/Normal mode operation*/,/*,每次,8,位,,1,个停止位,无奇偶验证,正常发送模式(非红外)*,/,ULCON0=0 x3|(0 2)|(0 3)|(0 6);/0b 0 0 xx 0 11,/*Interrupt request or polling mode/Normal transmit/Normal operation/PCLK/*/,/*,发送和接受引脚采用中断和轮询查询模式,正常发送,常规操作,时钟选择为,PCLK*/,UCON0=1|(1 2)|(0 10);,/*,禁止,FIFO*/,UFCON0=0;,/*,*,波特率计算:,115200bps,*PCLK=66MHz,*DIV_VAL=(66000000/(115200 x 16)-1=35.8-1=34.8,*UBRDIV0=34(DIV_VAL,的整数部分,),*(num of 1s in UDIVSLOTn)/16=0.8(DIV_VAL,的小数部分,),*(num of 1s in UDIVSLOTn)=12,*UDIVSLOT0=0 xDDDD(,在数据手册上,880,页查表,),*/,UBRDIV0=34;/,波特率分度值,UDIVSLOT0=0 xDDDD;,void uart_send_byte(unsigned char byte),while(!(UTRSTAT0 /*,等待发送缓冲区为空*,/,UTXH0=byte;/*,发送一字节数据*,/,unsigned char uart_recv_byte(),while(!(UTRSTAT0 /*,等待接收缓冲区有数据可读*,/,return URXH0;/*,接收一字节数据*,/,void uart_send_string(char*str),char*p=str;,while(*p),uart_send_byte(*p+);,void uart_send_num(unsigned int num)/,发送数字,char unit,tens,hunds,thund;,unit=0+num%10;,tens=0+num/10%10;,hunds=0+num/100%10;,thund=0+num/1000%10;,uart_send_byte(thund);,uart_send_byte(hunds);,uart_send_byte(tens);,uart_send_byte(unit);,最后是,AD,转换的实现,以及调试的主程序。寄存器宏定义的代码如下所示:,/ADC,相关寄存器,#define TSADCCON0 (*(volatile unsigned int*)0 xE1700000),#define TSDATX0 (*(volatile unsigned int*)0 xE170000C),#define ADCMUX(*(volatile unsigned int*)0 xE170001C),void uart_send_byte(unsigned char byte);,unsigned char uart_recv_byte();,void uart_send_string(char*str);,void uart_send_num(unsigned int num);,void adc_init()/,初始化,ADC,TSADCCON0=114|496|23|02;,ADCMUX=0 x1;,TSADCCON0|=0 x1;,void adc(void),while(TSADCCON0,while(!(TSADCCON0,uart_send_string(rR=);,uart_send_num(TSDATX0,void delay(int time),int i;,while(time-),for(i=0;i adc.dis,%.o:%.c,arm-linux-gcc-c$-o,$%.o:%.S,arm-linux-gcc-c$-o$,clean:,rm*.o*.elf*.bin*.dis,测试滑动变阻器的运行结果:将程序烧写到开发板并启动运行后,当转动滑动比租期的旋钮时,效果如下所示,:,#starting application at 0 x20000000,R=0616,R=0612,R=0615,R=0607,R=0606,R=0602,R=0611,R=0603,本章小结,本章主要介绍了嵌入式系统中最常用的一种信号接口,ADC,的使用,并且详细讲述了触摸屏的工作原理、硬件和软件设计等。要掌握,ADC,和触摸屏接口设计与应用并非像想象的那么难,建议多查看硬件资料的数据手册,并亲自动手完成程序的设计和调试工作。,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


第八章ADC和触摸屏接口与应用.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14680068.html