5643|11

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

触摸屏驱动采样请教 [复制链接]

DdsiTouchPanelGetPoint(
        TOUCH_PANEL_SAMPLE_FLAGS        *pTipStateFlags,
        INT                                *pUncalX,
        INT                                *pUncalY
    )
{
        ULONG status;
        // USHORT ioAdcCntr;
        // USHORT intrMask;
        static int SampleCount = 0;
        static TOUCH_PANEL_SAMPLE_FLAGS PrevStateFlags = TouchSampleIgnore;
        static INT PrevX = 0;
        static INT PrevY = 0;
        TOUCH_PANEL_SAMPLE_FLAGS TmpStateFlags;
        INT TmpX = 0;
        INT TmpY = 0;
        int i;
   
    //RETAILMSG(1, (TEXT(":::::::::::: DdsiTouchPanelGetPoint routine !!!\r\n")));

    // Read the status passed back by the HAL
    status = READ_REGISTER_ULONG( &(v_pDriverGlobals->tch.status) );

    if(status == TOUCH_PEN_UP) {
                v_pADCregs->rADCTSC = 0xD3;        // Set stylus down interrupt
                *pTipStateFlags = TouchSampleValidFlag;
                *pUncalX = PrevX;
                *pUncalY = PrevY;
                InterruptDone( gIntrTouchChanged );
                RETAILMSG(0, (TEXT("8 - (%d, %d) 0x%X\r\n"), *pUncalX, *pUncalY, *pTipStateFlags));
    }
    else if(status == TOUCH_PEN_DOWN){
                *pTipStateFlags = TouchSampleIgnore;
                *pUncalX = PrevX;
                *pUncalY = PrevY;
                Touch_Timer0_Setup();
                InterruptDone( gIntrTouchChanged );

                RETAILMSG(0, (TEXT("9 - (%d, %d) 0x%X\r\n"), *pUncalX, *pUncalY, *pTipStateFlags));
        }
        else {               
                if( (v_pADCregs->rADCDAT0 & 0x8000) || (v_pADCregs->rADCDAT1 & 0x8000) ){
                        v_pADCregs->rADCTSC = 0xD3;        // Set stylus down interrupt
                        *pTipStateFlags = TouchSampleValidFlag;
                        *pUncalX = PrevX;
                        *pUncalY = PrevY;
                        InterruptDone( gIntrTouchChanged );
                        RETAILMSG(0, (TEXT("91 - (%d, %d) 0x%X\r\n"), *pUncalX, *pUncalY, *pTipStateFlags));
                }
                else{                // charlie
                        //

                        for (i =0; i < 3; i++) {
                                // v_pADCregs->rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0);
                                v_pADCregs->rADCTSC=(1<<3)|(1<<2);
                                // Stylus Down,Don't care,Don't care,Don't care,Don't care,XP pullup Dis,Auto,No operation
                                v_pADCregs->rADCCON|=0x1;        // Start Auto conversion

                                while(v_pADCregs->rADCCON & 0x1);                //check if Enable_start is low
                                while(!(0x8000&v_pADCregs->rADCCON));        // Check ECFLG
//#ifdef YC_2440_SUPPORT
#ifndef YC_2440_SUPPORT
                                xbuf = 0x3ff & v_pADCregs->rADCDAT0;
                                ybuf = 0x3ff & v_pADCregs->rADCDAT1;
#else               
                                ybuf = 0x3ff - (0x3ff & v_pADCregs->rADCDAT0);
                                //xbuf = 0x3ff & v_pADCregs->rADCDAT1;
                                xbuf = 0x3ff-(0x3ff & v_pADCregs->rADCDAT1); //fhg
#endif
                        }       

                         PddpTouchPanelEvaluateSamples( &TmpStateFlags, &TmpX, &TmpY);
       
       
                        v_pADCregs->rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
       
                        Touch_CoordinateConversion(&TmpX, &TmpY);   
                       
                       
                        if (Touch_Pen_filtering(&TmpX, &TmpY)) // Valid touch pen
                    {
                            //RETAILMSG(1, (TEXT("valid touch pen\r\n")));
                                *pTipStateFlags = TouchSampleValidFlag | TouchSampleDownFlag;                       
                                *pTipStateFlags &= ~TouchSampleIgnore;
                        }
                        else        // Invalid touch pen
                        {
                            //RETAILMSG(1, (TEXT("invalid touch pen\r\n")));
                                *pTipStateFlags = TouchSampleValidFlag;
                                *pTipStateFlags |= TouchSampleIgnore;                               
                        }               
                        *pUncalX = PrevX = TmpX;
                        *pUncalY = PrevY = TmpY;
       
                           InterruptDone( gIntrTouch );
                          
                           RETAILMSG(0, (TEXT("0 - (%d, %d) 0x%X\r\n"), *pUncalX, *pUncalY, *pTipStateFlags));

                }
        }

    return;

}
这个里面只有采样三个点,,我想多采样几个点应该怎么做
for (i =0; i < 3; i++) {
                                // v_pADCregs->rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0);
                                v_pADCregs->rADCTSC=(1<<3)|(1<<2);
                                // Stylus Down,Don't care,Don't care,Don't care,Don't care,XP pullup Dis,Auto,No operation
                                v_pADCregs->rADCCON|=0x1;        // Start Auto conversion

                                while(v_pADCregs->rADCCON & 0x1);                //check if Enable_start is low
                                while(!(0x8000&v_pADCregs->rADCCON));        // Check ECFLG
//#ifdef YC_2440_SUPPORT
#ifndef YC_2440_SUPPORT
                                xbuf = 0x3ff & v_pADCregs->rADCDAT0;
                                ybuf = 0x3ff & v_pADCregs->rADCDAT1;
我将这里的i改大,是否可以!!1

最新回复

晕  详情 回复 发表于 2009-4-22 17:56
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
可以,不过要把相应的缓冲区ybuf 扩大。在那个求平均值的函数里边将多余的点算上去。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 liaifeilove 的回复:
可以,不过要把相应的缓冲区ybuf 扩大。在那个求平均值的函数里边将多余的点算上去。

liaifeilove 你好
我是这么做的,,我i改成个9,然后编译发现只要使用触摸屏就出现死机的姿态,改成4就不会出现这种情况,,
请问一下还要改别的地方不 ,,,
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主为什么要采集这么多点啊?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主为什么要这么多点啊.硬件不好,软件来补?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
当你改为i<9,那你xbuf,ybuf也要相应的加大才行呀,还有就是数字滤波那个算法函数你也要作修改呀,这些都很简单的,有点C语言基础就看得懂了的
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
其实采样多一点估计会准确点。

我的就采样了四次,效果也蛮好的。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
如果你的硬件和软件配合好,采一个点就够了,不然多采是非常浪费系统资源的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
我的是采20个点,去掉几个极值,取平均。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
你这么弄不是累人哦?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
看你代码也用的是wince,你不用过多考虑touch的代码,去看看codec相关touch的配置,把4线触摸屏的灵敏度调到合理的值
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

12
 
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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