基于嵌入式Linux系统的触摸屏驱动的开发
/*设置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_sc0x8000)) printk(spiwriteerror!); memset((void*)rxbuffer,0,2); 数据通信过程中,最重要的是时序,正确的时序要通过反复的实验才能得到。图3是在实验过程中得到的逻辑图(安捷伦公司的1672G逻辑分析仪测试结果)。其中,CS是片选信号,CK是时钟信号,DO是823e发送的数据。可以使用逻辑分析仪来阅读得到的数据是否和设备发送的数据一致。正确的通信必须经过长时间的调试才能够取得。 对ADS7846的操作 根据ADS7846的使用手册,驱动程序必须在初始化的时候与ADS7846建立通信。所以,823e首先要向ADS7846发送命令,得到ADS7846的回复后建立通信。驱动程序调用SPI的读写函数来实现对ADS7846的操作。
驱动 开发 触摸屏 系统 嵌入式 Linux 基于 相关文章:
- 声卡安装向导中文版(11-12)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- Linux内核解读入门(11-09)
- Linux操作系统网络驱动程序编写(04-11)
- Linux系统下USB摄像头驱动程序开发(04-25)
- Linux系统中如何正确安装摄像头驱动(04-25)