6872|10

1246

帖子

19

TA的资源

五彩晶圆(初级)

楼主
 

M4 Hanker开发板:uc/GUI的移植(加触摸功能+心得体会) [复制链接]

发现Triton.zhang老大提供的uc/GUI例程没有触摸功能,所以将触摸功能加入,同时跑了几个uc/GUI的小例子,因为下周有好多考试,所以没有进行深入的扩展,不足之处还请见谅!顺便请假一周!不然要挂啦!
要说uc /GUI的c文件,那叫一个多呀!为了方便编译,我利用IAR生成了静态连接库,uCGui_LM4F.a,这个和Ti官方库中的.a文件时一样的道理!
M4 Hanker这款开发板的触摸功能是靠AD采样的得到X Y ,坐标,这与我以前使用的带有触摸芯片的触摸屏不同,而UC/GUI 的例程中大都是通过SPI读取触摸芯片的数字量来直接得到X Y的坐标的!幸好我在Core文件夹下面看到了GUI_TOUCH_DriverAnalog.c这样一个文件,从它的名字就可以看出,它和模拟量有关系!!
进入函数里面我发现函数void GUI_TOUCH_Exec(void)是按键状态检测函数,于是我在其中添加了如下语句:
{
  extern void 
TouchTrigger(void);
  TouchTrigger();
  }


#else
 {
Get_Touch_XY(&xPhys,&yPhys);  
 }
#if !GUI_TOUCH_SWAP_XY /* Is X/Y swapped ? */
   x = xPhys;
   y = yPhys;
#else
   x = yPhys;
   y = xPhys;
#endif

这段程序是我在网上看到一位高手这样处理的!事实证明很有效!道理其实很简单,就是把通过AD采到并处的X Y替换通过SPI口读到的数字量X Y!
其中TouchTrigger(void);为:

void TouchTrigger(void)
{
    ADCProcessorTrigger(ADC0_BASE, 3);
}
AD0的通道3
而Get_Touch_XY(&xPhys,&yPhys);则为:
void Get_Touch_XY(int * x, int * y)
{
if(isPENUP ==1)
{
*x =*y =0;
}
else
{
          *x = g_psSamples[g_cIndex];
 *y = g_psSamples[g_cIndex+1];
}
}
看过这块板子的触摸驱动的同学应该猜到这两个函数所在的位置了吧!
我把它们放在了touch.c里面了,Triton.zhang老大提供的触摸驱动库很棒,我只是在里面加了这两个函数,然后获取其处理的X Y的值,这样触摸部分就搞定了!




然后我在上面跑了几个uc/GUI的小例子,本来想把他们做在一起,奈何考试临近,实在是没精力了,就等到有时间在搞吧!
值得一提的是,我把触屏扫描的程序放在了
void TickintHander(void)
{
  GUI_TOUCH_Exec();
}
跟人感觉更加灵敏一些!或者尝试加入定时器中断,更好的效果有待于验证!
uC/OS+Uc/GUI的程序也调是一段时间,但是GUIDEMOmain()就是不执行下一步的显示!不知道是什么原因,等考试完了在继续搞吧!




[ 本帖最后由 anananjjj 于 2012-6-10 21:52 编辑 ]

GUI(库尝试).zip

8.75 MB, 下载次数: 155

售价: 1 分芯积分  [记录]

代码!

最新回复

稍微看了下评论,使用切换复用口来测量触摸位置的吗?   详情 回复 发表于 2014-7-7 02:07
 
点赞 关注

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
NB ,这样的移植方法更牛....呵呵

例程上来,咱也跑跑

[ 本帖最后由 shower.xu 于 2012-6-10 21:25 编辑 ]
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

板凳
 

回复 沙发 shower.xu 的帖子

不好意思!忘发啦!马上马上!
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 anananjjj 的帖子

问一下楼主,看你的图,鼠标移动会把背景擦出,我移植的时候也出现了这个问题,不知道是什么原因造成的?
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

5
 

回复 4楼 wangzheyu 的帖子

个人感觉是背景没有刷新彻底吧!忙着考试,具体我还真没研究过!

[ 本帖最后由 anananjjj 于 2012-6-12 11:30 编辑 ]
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

6
 

触屏驱动触发方式

有一问请教:
UCGUI触屏采用systick周期处理器触发ADC获取触摸事件,
void TickintHander(void)
{
  GUI_TOUCH_Exec();
}

void GUI_TOUCH_Exec(void)
{
。。。
  TouchTrigger();
。。。
  }

void TouchTrigger(void)
{
    ADCProcessorTrigger(ADC0_BASE, 3);
}

而触屏驱动touch.c中,采样ADC配置为计时器触发(ADC_TRIGGER_TIMER),不是处理器触发(ADC_TRIGGER_PROCESSOR)
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_TIMER, 0);
为何?

点评

我当时也没想太多,用了计时器触发成了就没再考虑这个问题了!都过了几个月了!没啥印象了!能说说你的想法吗?我其实还有好多东西没搞明白呢!希望能从你这学到东西!:)  详情 回复 发表于 2012-8-23 14:24
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

7
 

回复 6楼 ooakk 的帖子

我当时也没想太多,用了计时器触发成了就没再考虑这个问题了!都过了几个月了!没啥印象了!能说说你的想法吗?我其实还有好多东西没搞明白呢!希望能从你这学到东西!
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

8
 
交流一下。
根据楼主的思路,ADC的配置应该为处理器触发,即程序触发采样:
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
除此之外,TI提供的触屏驱动基于定时器,我想除了用楼主的systic来驱动无OS的UCGUI触屏之外,也可尝试采用定时器驱动。

点评

你这么说的有道理啊!我记得当时我就一直纠结把GUI_TOUCH_Exec(); 放在那里,后来索性就放进了systic中断函数中了,我在UC/OS II的移植中是放进了一个单独任务中来扫描的!呵呵! 采用定时器驱动肯定可以的!处理  详情 回复 发表于 2012-8-23 18:42
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

9
 

回复 8楼 ooakk 的帖子

你这么说的有道理啊!我记得当时我就一直纠结把GUI_TOUCH_Exec();
放在那里,后来索性就放进了systic中断函数中了,我在UC/OS II的移植中是放进了一个单独任务中来扫描的!呵呵!
采用定时器驱动肯定可以的!处理器触发的我还真没试过!希望你能够试试看,期待你的结果!最近比较忙没时间弄这个了!呵呵!感谢你的建议!谢谢!
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

10
 
你的方案本身就是采用处理器中断调用ADC的方式(ADCProcessorTrigger)来实现触屏驱动的,只是触屏ADC的配置忘了改成:
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
具体例子也可参看别人写的工程实例,如http://www.amobbs.com/thread-4247291-1-1.html
 
 
 

回复

110

帖子

0

TA的资源

一粒金砂(中级)

11
 
稍微看了下评论,使用切换复用口来测量触摸位置的吗?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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