各位大侠,给点力吧。帮帮忙吧。
最近在做一个校准屏幕的小程序,搞的很是蛋疼,买了个垃圾公司的开发板,想不到售后烂的要死,发个问题帖子十天都没有回我,发誓以后再也不买那种令人很蛋疼的公司的产品了,
接下来说一下我的问题,我想每一次通过在屏幕上显示一个校准点(十字坐标)获得当前的坐标的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在这里失灵了。 |