打印

DX能否帮我分析下这段TouchScreen的代码操作流程 ?

[复制链接]
1625|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
playlinus|  楼主 | 2009-5-22 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DX能否帮我分析下这段TouchScreen的代码操作流程 ?

/*****************************************
  NAME: Touchpanel.c
  DESC: ADC & Touch screen test
  HISTORY:
  2003.09.23:Leon YH KIM: draft ver 1.0
*****************************************/
#include "def.h"
#include "2440addr.h"
#include "2440lib.h"


#define REQCNT 30
#define ADCPRS 9    //YH 0627
#define LOOP 1

void __irq AdcTsAuto(void);

int count=0;
volatile int xdata, ydata;
    
void Test_Touchpanel(void)
{
   
    rADCDLY=50000;                  //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
    //Touch down to conversion delay time width , X coordinate & Y coordinate conversion time width setting 
    rADCCON=(1<<14)+(ADCPRS<<6);   //ADCPRS En, ADCPRS Value
    // A/D converter prescaler enable , PRSCVL value setting , A/D Frequency = PCLK / (PRSCVL + 1)
    Uart_Printf("ADC touch screen test ");

    rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
    //Detect stylus down interrupt signal , YM Enable , YP Disable , XM Disable, XP Disable , XP Pull-up enable , Normal ADC Conversion , Waiting for interrupt mode 
    pISR_ADC = (int)AdcTsAuto;//将中断处理程序名放入中断向量表中对应地址
    //
    rINTMSK=~BIT_ADC;        //ADC Touch Screen Mask bit clear
    rINTSUBMSK=~(BIT_SUB_TC);//Touch Screen Mask bit clear

    Uart_Printf(" Type any key to exit!!! ");
    Uart_Printf(" Stylus Down, please......  ");
    Uart_Getch();

    rINTSUBMSK|=BIT_SUB_TC;//Touch Screen Mask bit set
    rINTMSK|=BIT_ADC;//ADC Touch Screen Mask bit set
    Uart_Printf("Touch Screen Test is Finished!!! ");

}


void __irq AdcTsAuto(void)
{
    int i;
    U32 saveAdcdly;

    if(rADCDAT0&0x8000)//判断 updown bit ,如果提起则
    {
        //Uart_Printf(" Stylus Up!! ");
        rADCTSC&=0xff;    // Set stylus down interrupt bit
    }
    //else 
        //Uart_Printf(" Stylus Down!! ");

    rADCTSC=(1<<3)|(1<<2);         //XP Pull-up disable, Seq. X,Y postion measure.
    saveAdcdly=rADCDLY;
    rADCDLY=40000;                 //Normal conversion mode delay about (1/50M)*40000=0.8ms

    rADCCON|=0x1;                   //start ADC  AD转换开始且该位在开始后清零

        while(rADCCON & 0x1);        //check if Enable_start is low
        while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
        
            while(!(rSRCPND & (BIT_ADC)));  //check if ADC is finished with interrupt bit

            xdata=(rADCDAT0&0x3ff);
            ydata=(rADCDAT1&0x3ff);

     //YH 0627, To check Stylus Up Interrupt.
     rSUBSRCPND|=BIT_SUB_TC;//
     ClearPending(BIT_ADC);//
     rINTSUBMSK=~(BIT_SUB_TC);//
     rINTMSK=~(BIT_ADC);//
             
     rADCTSC =0xd3;    //Waiting for interrupt
     rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.

            while(1)        //to check Pen-up state
            {
             if(rSUBSRCPND & (BIT_SUB_TC))    //check if ADC is finished with interrupt bit
                 {
                    //Uart_Printf("Stylus Up Interrupt~! ");
                    break;    //if Stylus is up(1) state
                }
            }    

    Uart_Printf("count=%03d  XP=%04d, YP=%04d ", count++, xdata, ydata);    //X-position Conversion data            

    rADCDLY=saveAdcdly; 
    rADCTSC=rADCTSC&~(1<<8); // Detect stylus Down interrupt signal.
    rSUBSRCPND|=BIT_SUB_TC;
    rINTSUBMSK=~(BIT_SUB_TC);    // Unmask sub interrupt (TC)     
    ClearPending(BIT_ADC);
}


自己看单句还基本看明白了,可整个流程不了解,如果我要多次采集一个点,又该如何处理呢,有没有裸奔玩触摸屏的朋友指导一二 ....

相关帖子

沙发
l0p0c| | 2009-5-22 13:08 | 只看该作者

不知道你要什么结果?

使用特权

评论回复
板凳
zhousd| | 2009-5-22 16:49 | 只看该作者

如果用操作系统,那就按专用的驱动格式

编写就是了(很程式化),别人都有例程,直接移过去就得了,还在此细节上浪费时间,不值得。

楼主要学习触摸屏原理,大可用裸奔的方法。

使用特权

评论回复
地板
playlinus|  楼主 | 2009-5-23 19:10 | 只看该作者

楼上,我是想裸奔,但以上两段程序的思想方法不太了解,能否

使用特权

评论回复
5
zhousd| | 2009-5-24 09:41 | 只看该作者

楼主完全不懂触摸屏的工作原理,

这些代码对楼主来说就象看天书,若果商家做好的驱动有BUG,那就找商家好了。

楼主先把触摸屏的工作原理详细写出来,让大家看看楼主的资质如何。

使用特权

评论回复
6
playlinus|  楼主 | 2009-5-25 17:11 | 只看该作者

算了,这些老鸟都不会花些时间在问题上,还是自己看书研究...

....

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

518

帖子

2

粉丝