当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于嵌入式Linux系统的触摸屏驱动的开发

摘要:本文介绍了一个在嵌入式Linux平台上编写触摸屏驱动的实例。本平台基于摩托罗拉公司的Powerpc823eCPU芯片,并采用个性化的Linux2.4.4内核作为它的微型操作系统,介绍了如何通过对823e的SPI接口的操作实现与触摸屏控制芯片ADS7846的通信。本文在构造硬件的基础上说明了触摸屏驱动程序的C语言实现。

关键词:Linux内核;PowerPC823e;SPI接口;ADS7846;触摸屏驱动

引言

触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备越来越受各种终端产品生厂商的青睐。而linux操作系统因为有着源代码公开、便于裁减的优点,是当前嵌入式系统的一大热门选择。本文将在构造硬件的基础上,深入的讨论如何在linux操作系统里编写一个触摸屏驱动。

SPI接口的简介

串行外围设备接口SPI总线技术是摩托罗拉公司推出的一种全双工、同步串行接口,它提供了功能强大的四线接口(接收线、传输线、时钟线和从片选线)。

SPI的从设备和主设备共用一个时钟线,而时钟始终是从主设备里发送出来的。当823e是主模式的时候,片选信号线就停用,如果是从模式的话,它的从片选线低电平使能。在本例中,823e是主设备,所以我们另外选用了一个823e的GPIO(通用输入输出口)作为从设备的片选信号。大多数同步串行式数据转换器都很容易与这种接口连接,其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。

触摸屏的硬件

触摸屏输入系统由触摸屏、触摸屏控制芯片和数据处理器三部分组成。触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式和表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。

我们选用的触摸屏是AMD公司的电阻式触摸屏AMT9502。触摸屏控制芯片是TI公司的模数转换芯片ADS7846。该芯片支持SPI通信协议,所以我们就用823e的SPI接口与ADS7846芯片通信,从触摸屏得到的模拟信号经过模数转换器后输入作为数据处理器的823e。

软件程序

823e通过SPI接口与触摸屏控制器通信,所以对触摸屏的控制就是对SPI接口的操作。完成SPI接口驱动的编写之后,就能够与触摸屏控制器建立通信。在linux内核运行完毕之后,SPI接口要打开,并且已经分配了一部分内存供它使用。同时,SPI的中断程序已经加入等待队列,一旦SPI接口有中断,SPI的中断服务程序就被唤醒,开始运行。这部分的工作是在系统启动过程中运行的初始化函数来完成的。下面将结合源代码来讨论初始化函数的编写,其中,就两点进行重点讨论。

microcode的使用

因为SCCx的网络参数空间和SPI的参数空间有冲突,如果要在使用SCCx作为网口的同时还使用SPI驱动的话,就要装载microcode,然后重新定位SPI的参数空间。而micropatch就是装载microcode的一个文件,这个文件里的microcode可以到motorola的官方网站上去下载。

CPM包括一部分双向RAM口,称为参数RAM,它包括USB、SCC、SMC、SPI、I2C和IDMA信道操作。其中,SPI和I2C参数区域可以被重新定位到另外的32位的参数区域。仔细阅读完下面的代码,就可以很好的理解这个过程是如何操作的了:

spi=(spi_t*)&cp->cp_dparam[PROFF_SPI];

printk("thespiaddris%pn",spi);

if((reloc=spi->spi_rpbase))

{

spi=(spi_t*)&cp->cp_dpmem[spi->spi_rpbase];

printk("MICROCODERELOCATIONPATCHn");

}

上面这一端代码的作用是:首先查询是否已经使用了microcode,然后取得重新定位后的指针(装载microcode和重新定位的操作在microcode.c里完成)。

RAM里的SPI描述符

有关SPI接口的描述符保存在缓冲区里,缓冲区的地址由双向RAM里SPI缓冲区描述符指定。要发送的数据在发送缓冲区里,接收的数据将被存到发送缓冲区里。缓冲区描述符环路组成一个环路,帮助逐步传输(接收)想要发送(接收)的数据。正是由于这些缓冲区描述符,通信处理模块才能够完成通信,并且说明并处理错误。

可以通过一段代码来看上面示意图的过程是如何在初始化函数里实现的:

spi->spi_rbase=r_rbase=dp_addr;

spi->spi_tbase=r_tbase=dp_addr+sizeof(cbd_t);

/*把RXBDRING的地址写入POINTERTOSPIRXRING

把TXBDRINT的地址写入POINTERTOSPITXRING*/

spi->spi_rbptr=spi->spi_rbase;

spi->spi_tbptr=spi->spi_tbase;

/*以上的两句代码必须得写,否则的话就会在读写氖焙蛩阑?/

tbdf=(cbd_t*)&cp->cp_dpmem[r_tbase];

rbdf=(cbd_t*)&cp->cp_dpmem[r_rbase];

/*从这句代码里可以看出,RXBDRING的地址是在双向RAM里*/

tbdf->cbd_sc&=~BD_SC_READY;

rbdf->cbd_sc&=~BD_SC_EMPTY;

/*设置RING的状态,发送的RING设置成非准备发送状态,

接受的RING设置成非准备接受状态*/

rxbuffer=m8xx_cpm_hostalloc(2);

txbuffer=m8xx_cpm_hostalloc(2);/*得到两个空间*/

tbdf->cbd_bufaddr=__pa(txbuffer);

rbdf->cbd_bufaddr=__pa(rxbuffer);

/*内存映射;并把DATAPOINTER设置成RXDATABUFFER的地址*/

以上的代码是初始化函数里完成的,一旦初始化函数正确运作,就可以采取正确的步骤进行SPI口通信了。以上初始化完之后,要调用cpm_install_handler函数,该函数的作用是把中断函数注册进内核,一旦SPI口产生硬件中断,就调用中断函数,中断函数的编写可以依据不同系统的不同需要,在本例中,我们使得一旦调用中断函数,就读取SPI接收到的数据。

接下来以如何发送数据为例,分析如何操作SPI口通信。

发送数据的步骤

在此例中,设SPI接口为主模式。为了开始数据传送过程,内核把要传送的数据写到一个数据缓冲区,然后配置缓冲区描述符,以达到传送的目的。以下给出发送数据的一段代码,通过代码解释传输的过程。

memset((void*)txbuffer,0,2);/*清空buffer*/

tbdf->cbd_sc=BD_SC_READY|BD_SC_LAST|BD_SC_WRAP;

tbdf->cbd_datlen=2;

/*设置发送缓冲区的状态控制寄存器的值和发送数据的个数*/

rbdf->cbd_sc=BD_SC_EMPTY|BD_SC_WRAP;

rbdf->cbd_datlen=0;

/*由于并不打算接受数据,所以个数为0*/

cp->cp_spmode=0x777f;

cp->cp_spie=0xff;

cp->cp_spim=0x37;

/*设置SPI接口寄存器的值,以便发送数据,设置SPI接口

主或从模式必须在发送函数里设置,否则的话,不能发送数据*/

cp->cp_spcom|=0x80;/*开始发送数据*/

udelay(1000);/*必须得等待,否则的话不能正确读到缓冲区状态控制寄存器的值*/

if((tbdf->cbd_sc&0x8000))

printk("spiwriteerror!");

memset((void*)rxbuffer,0,2);

数据通信过程中,最重要的是时序,正确的时序要通过反复的实验才能得到。图3是在实验过程中得到的逻辑图(安捷伦公司的1672G逻辑分析仪测试结果)。其中,CS是片选信号,CK是时钟信号,DO是823e发送的数据。可以使用逻辑分析仪来阅读得到的数据是否和设备发送的数据一致。正确的通信必须经过长时间的调试才能够取得。

对ADS7846的操作

根据ADS7846的使用手册,驱动程序必须在初始化的时候与ADS7846建立通信。所以,823e首先要向ADS7846发送命令,得到ADS7846的回复后建立通信。驱动程序调用SPI的读写函数来实现对ADS7846的操作。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭