微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式Linux系统的触摸屏驱动的开发

基于嵌入式Linux系统的触摸屏驱动的开发

时间:05-15 来源:互联网 点击:

/*设置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的操作。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top