主题 : 请教,不跑系统裸机测试TP功能异常, 请教各位大哥 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 8129
精华: 0
发帖: 78
金钱: 490 两
威望: 213 点
综合积分: 156 分
注册时间: 2009-08-11
最后登录: 2017-09-13
楼主  发表于: 2009-09-19 14:54

 请教,不跑系统裸机测试TP功能异常, 请教各位大哥

小弟我目前技术不够,所以没有跑系统,目前在裸机实现TP划线功能的时候遇到下面这个问题,,还希望各位牛人帮忙看看

问题点:利用mini2440自带的TP测试程序,经过稍微修改后出现这个问题。当我的触摸笔点在TP上时(触摸笔一起在上面不抬起),如果Y方向的转换值 小于550的时候,就不能连续的输出转换值,如果点在Y方向靠下一点的位置,Y转换值大于550的时候,转换出来的数据就可以连续输出。
    因为我想实现裸机点亮LCM 并实现划线测试TP的功能,现在的情况是屏的一半可以划线,而另外一半只能画点,而且TP是绝对没有问题的。  所以请大家帮忙了。

下面是转换数据的那一段程序,请大家帮忙看看。。。

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

    if(rADCDAT0&0x8000)
    {
        //Uart_Printf("\nStylus Up!!\n");
        rADCTSC&=0xff;    // Set stylus down interrupt bit
    }
    //else
        //Uart_Printf("\nStylus Down!!\n");

    rADCTSC=(1<<3)|(1<<2);         //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

        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.


    Uart_Printf("count=%03d  XP=%04d, YP=%04d\n", 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);
}


级别: 侠客
UID: 8129
精华: 0
发帖: 78
金钱: 490 两
威望: 213 点
综合积分: 156 分
注册时间: 2009-08-11
最后登录: 2017-09-13
1楼  发表于: 2009-09-19 14:58
补充一下,,我用单步执行的方法调试过,,在单步运行的时候 不管Y的转换值是>550 还是小于550,相关寄存器的值都是正确变化的。。包括 SRCPND     INTPND    SUBSRCPND     ADCCON      ADCTSC, 中断屏蔽寄存器那边我打开之后就没有关过,,这个问题到底是怎么回事呢?
级别: 侠客
UID: 8129
精华: 0
发帖: 78
金钱: 490 两
威望: 213 点
综合积分: 156 分
注册时间: 2009-08-11
最后登录: 2017-09-13
2楼  发表于: 2009-09-19 16:34
不劳烦各位大哥了。。问题解决了。