打印

关于2440触摸屏蛋疼的问题!!!!

[复制链接]
2940|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dxf17043206|  楼主 | 2011-8-4 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,给点力吧。帮帮忙吧。
  最近在做一个校准屏幕的小程序,搞的很是蛋疼,买了个垃圾公司的开发板,想不到售后烂的要死,发个问题帖子十天都没有回我,发誓以后再也不买那种令人很蛋疼的公司的产品了,
  接下来说一下我的问题,我想每一次通过在屏幕上显示一个校准点(十字坐标)获得当前的坐标的X值和Y值,然后先后分三次获取三个校准点的值,最后计算出LCD的像素点坐标和触摸屏的物理坐标的关系,
我的触摸屏初始化如下

  void touch_screen_init(void)
{
  rADCDLY  =5000;  
  rADCCON  =(1<<14)|(49<<6);
   rADCTSC  =(0xd3&(0<<8)); //设置成等待中断模式,并且检测笔尖落下中断信号
  EnableSubIrq(BIT_SUB_TC);
  EnableIrq(BIT_ADC);
  pISR_ADC =(U32)Touch_Screen;
  flagTS=0;   //这是一个全局变量,用于是否进入触摸屏中断,
}

中断函数如下:
void __irq Touch_Screen(void)
{      
     rADCTSC  = (1<<3)|(1<<2);          //设置成连续转换模式。
     j=rADCDLY;
     rADCDLY  = 50000;                       //delay
     rADCCON |= 0x1;                          //启动转换
     while(rADCCON&0x1);                    //检查是否开始   
     while(!(rADCCON&0X8000));           // end of coversion 标志寄存器
     while(!(rSRCPND&(BIT_ADC)));      
     X_data =(rADCDAT0&0x3ff);          //当前校准点的X值赋予全局变量 X_data
     Y_data =(rADCDAT1&0x3ff);          //当前校准点的Y值赋予全局变量 Y_data
     
     flagTS=10;                            //置位标志,表示当前被转换的数据已经读取了
     rSUBSRCPND|=(BIT_SUB_TC);    //清楚触摸屏的次级中断源
     ClearPending(BIT_ADC);              //清除AD中断源
     rINTSUBMSK = ~(BIT_SUB_TC);     // 触摸屏中断功能有效
     rINTMSK = ~(BIT_ADC);                 //AD中断功能有效
     rADCTSC=0xd3;                  //再次设置等待中断模式,这次是判断触笔的抬起
     rADCTSC=rADCTSC|(0x1<<8);            //设置检测触笔抬起中断信号。
     
     while(1)                                             //等待触笔抬起信号
     {
         if(rSUBSRCPND&(BIT_SUB_TC))                  
           {
             break;
           }
     }
     
     rADCDLY=50000;
     rADCTSC=0xd3;                  //设置等待中断模式,为下一次触笔的落下做准备
     ClearSubPending(BIT_SUB_TC);   //清次级中断源
     EnableSubIrq(BIT_SUB_TC);
     ClearPending(BIT_ADC);             //清除中断挂起寄存器和中断源寄存器,
  
}  


在main函数中首先声明全局变量
  unsigned int    flagTS=0, X_data=0, Y_data=0;
接下来进行一系列的初始化,包括触摸屏,LCD,uart,和相关的GPIO等
接下来刷新屏幕显示第一个校准点, 用while(flagTS==0)来等待中断的产生,
接下来保存前一次的坐标值,复位flagTS=0;刷屏显示第二个校准点,依次将三个
点的物理坐标采集到。后再做相关的计算


但是我的问题是我在main 函数中单步调试到while(flagTS==0);时。程序指针不会再向下运行了,即使中断发生了,flagTS被改变了指针也依然不能够往下运行。
Go(全速运行)的时候也是一样的不能够向下运行,不管触笔如何触屏幕都是一样的,感觉好像while在这里失灵了。

相关帖子

沙发
hys0401| | 2011-8-4 20:18 | 只看该作者
volatile unsigned int    flagTS试下?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dxf17043206 + 1
板凳
dxf17043206|  楼主 | 2011-8-5 08:04 | 只看该作者
2# hys0401

貌似可以了,兄弟你牛X啊,看来这个C语言还的好好学呢!!

使用特权

评论回复
地板
whws007| | 2011-12-1 14:06 | 只看该作者
兄弟你这问题应该解决了吧,这都12月份了,如果没有解决的话:在while(flagTS==0);后边加个延时{delay(10);}就行了,我也遇到这问题

使用特权

评论回复
5
qingwa1990| | 2011-12-6 20:39 | 只看该作者
volatile很给力啊!中断里面变量必备额

使用特权

评论回复
6
wu_long| | 2011-12-8 15:46 | 只看该作者
volatile   以前 也是 弄的 我 郁闷 看了 学习学习

使用特权

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

本版积分规则

9

主题

16

帖子

1

粉丝