4550|6

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何进行ads7843触摸屏的调试?? [复制链接]

联系 收藏 回复 编辑 删除
如何进行ads7843触摸屏的调试??
我采用ads7843进行触摸屏数据转换,DOUT脚始终是高电平,采集的数据始终是同样的值8190,8190(12位 最大值)
郁闷中 ,不知如何解决,请用过ads7843的朋友指点一二。
下面是程序中读ads7843数据部分。

// A/D 通道选择命令字和工作寄存器
#define        CHX         0x90        //通道Y+的选择控制字      

#define        CHY         0xD0        //通道X+的选择控制字   


#define TP_DCLK(a)  outw((inw(S3C44B0X_PDATF) &(~(1<<8)) ) | ((a&1<<8),S3C44B0X_PDATF)   //GPF8
#define TP_CS(a)    outw((inw(S3C44B0X_PDATF) &(~(1<<7)) ) | ((a&1)<<7),S3C44B0X_PDATF)  //GPF7
#define TP_DIN(a)   outw((inw(S3C44B0X_PDATF) &(~(1<<6)) ) | ((a&1)<<6),S3C44B0X_PDATF)  //GPF6

//读ADS7843的I/O控制口
#define TP_DOUT  ((inw(S3C44B0X_PDATF)>>5) & 0x1)  //GPF5
#define TP_IRQ   ((inb(S3C44B0X_PDATG)>>2) & 0x1)  //TP_IRQ-----ExINT2(GPG2)

static void ads7843_Start( void )
{
        TP_CS(1);
        TP_DCLK(0);
        TP_CS(0);        
        TP_DIN(1);
        TP_DCLK(1);                    
}

static void ads7843_Write ( unsigned char  cmd )/*实际上写命令字*/
{
        unsigned char  i,temp;
        temp=0x80;
        TP_DCLK(0);
        for( i = 0; i < 8; i++ )
        {
        /*将控制字分解成位传入ads7843,从而ads7843发送命令*/
                if(cmd&temp)  
                        {
                                TP_DIN(1);
                                printk("1 ");
                        }
                else
                        {
                                TP_DIN(0);
                                printk("0 ");
                        }

                /*软件模拟一个CLK,将一位送出,总共送8位,所以总共循环产生了8个时钟*/
                TP_DCLK(1);  /*DCLK置高*/
                for( j = 0; j < 25; j++ );        //200ns
                TP_DCLK(0); /*DCLK清0*/
                for( j = 0; j < 25; j++ );        //200ns        
                //为送下一位准备
                temp=temp>>1;   
        }        
          return ;
}

/*读数据*/
static unsigned short  ads7843_Read ( void )
{
        unsigned short ack = 0 ;
        unsigned char i;
                        
        for( i = 0; i < 12; i++ )
        {
                TP_DCLK(1);
                for( j = 0; j < 25; j++ );        //200ns
                TP_DCLK(0);
                for( j = 0; j < 5; j++ );        /*时钟下降沿读取*/
               
                if(TP_DOUT)
                        ack +=1;
                // printk("%x ",TP_DOUT);
                for( j = 0; j < 20; j++ ); //200ns
                ack=ack<<1;
        }

        for( i = 0; i < 4; i++ )
        {
                TP_DCLK(1);
                for( j = 0; j < 25; j++ );        //200ns
                TP_DCLK(0);
                for( j = 0; j < 25; j++ ); //200ns
        }
        
        TP_DCLK(0);
        printk("ack=%d \n",ack);
        return ack;
}

static void ads7843_get_XY(void)
{         
        ads7843_Start() ;
        for( j = 0; j < 5; j++ ); //40ns
        
        ads7843_Write( CHX ) ;
        //延时200ns等待数据转换
        for( j = 0; j < 25; j++ ); //200ns
         X= ads7843_Read() ;
     
           
        ads7843_Write( CHY ) ;
        for( j = 0; j < 25; j++ ); //200ns
         Y= ads7843_Read() ;

         TP_CS(1);                              //芯片禁止
        }




//I/O初始化

static  void  s3c44b0_IO_init(void)
{
       /*配置与ADS7843 相连的I/O端口 output : PF5,PG3;      inputGF6,PF7,PF8   ;ads7843  busy  线没用*/
        unsigned int val32;
        unsigned short  val16;

      /*配置F  端口*/
        /*-------------------------*/
        /* configuration of PCONF  */
        /*-------------------------*/
        val32=inl(S3C44B0X_PCONF);
        outl((val32&0xFFC003FF)|0xFFC923FF, S3C44B0X_PCONF);  /* config GPF5 input  ; GPF6  GPF7  GPE8 output */
        
        /*-------------------------*/
        /* configuration of PUPF */
        /*-------------------------*/
        val16 =inb(S3C44B0X_PUPF)&0xFE1F;
        outw(val16|0xFFDF, S3C44B0X_PUPF); /* config GPF5 activate pull up   GPF5 上拉电阻使能,GPF6,GPF7,GPF8  disable */
}

最新回复

我也在调,总是读到0,最后一次读到的不是0了,然后就连触屏中断也进入不了了 qq451491237 求指导求帮忙  详情 回复 发表于 2012-8-3 11:35
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在中断程序中调用ads7843_get_XY()进行坐标X,Y读取。


出错的地方:
运行后 X=8190  Y=8190 , 【TP_OUT (DOUT) 总是为1】

运行了N次都是这个结果!!!

伤透心了!

请热心人帮帮忙,救救我。
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
呵呵,学习
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
等待牛人来答.
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
接分是王道!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
哎,跟我一样,不过坐标我是总显示4095 (8位的最大值),硬件不知IN3IN4 怎么接?哥们,你调试成功了吗?如果成功了,联系我,帮帮我哦,QQ :418747863
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

7
 
我也在调,总是读到0,最后一次读到的不是0了,然后就连触屏中断也进入不了了 qq451491237 求指导求帮忙
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表