阅读:1489回复:13
请教关于键盘驱动的设计
使用的是arm+wince
开发板上预留的是spi接口做键盘接口 我不打算用spi接口,我用的是io直接引出做矩阵键盘 我想问的是键盘扫描过程和处理这部分应该放在哪?我找了开发板所带的键盘程序没找到有关这部分的程序 请大家帮帮忙,给我指点指点,我刚开始做这个驱动 谢谢 |
|
沙发#
发布于:2004-12-20 09:06
为什么没人回呀
我记得这里有很多好心人的呀 |
|
论坛版主
|
板凳#
发布于:2004-12-22 16:38
如果对按键响应速度要求不是太严可以放到ist里面去扫描,如果严就在isr里面也可以,因为你访问的都是cpu内部的寄存器,isr不会太耽误时间,不过要注意由于按键时间长,如果用电平触发,在清除中断后可能又会进入isr,所以可以用沿触发中断
|
|
地板#
发布于:2004-12-23 13:10
谢谢wxl_50685330大哥
我还有疑问 1。isr和ist分别在哪?我看例程里的IsrThreadProc(),IsrThread(),IsrThread(),这些是isr部分么? 2。还有我要做这个键盘驱动,需要哪些步骤呀,我觉得无从下手,不知道该怎么一步一步的来实现。尤其对这个层的概念很模糊,不知道哪部分是MDD层,哪部分是PDD层? wxl_50685330大哥要有耐心呀,谢谢! |
|
论坛版主
|
地下室#
发布于:2004-12-23 14:46
耐心耐心,你看我这样子不是很有耐心得嘛:))
你现在应该先看看文档再开始做,在pb的帮助里面有专门的驱动开发主题讲键盘驱动的问题,在此之前你需要了解ce驱动的模型和加载流程,这些也在驱动开发的主题下。先看了帮助后你刚才说的基本就清楚了,帮助还是比较清晰和详细的,关键是看文档可以比较系统,good luck! |
|
5楼#
发布于:2004-12-23 17:13
我知道wxl_50685330是好心人
我是怕我的问题太弱了,呵呵 我今天提的第一个问题我已经明白了 中断部分也处理的差不多了 我现在的问题是如果我把keybd.cpp编好了 下面应该怎么做,,怎么样给他下到开发版里? 我的问题会不会还是问的很弱呀? |
|
论坛版主
|
6楼#
发布于:2004-12-24 13:26
我昨天说的那些文档还是要继续看,系统地看一遍,有好多东西就有印象了。
在写好源代码后,需要编译,目前你先是用命令行方式来做,生成最终的动态链接库,这就需要看怎么在命令行方式编译代码的文档。在生成dll后,把它连接如os image,然后就可以测试了。 你先看编译部分,涉及命令行编译环境的建立和source,xxx.def等文件的建立,这些东西你可以参照pb的例子和文档。而建立cmd line的问题,目前你可以启动pb后选build菜单的open build release directory 慢慢来:) |
|
7楼#
发布于:2004-12-28 12:46
谢谢wxl_50685330大哥
我先看看,有问题了还要麻烦大哥的 先奉上10分,赫赫 |
|
8楼#
发布于:2004-12-28 14:23
wxl_50685330大哥,我又遇到问题了
我判断出键值后,怎么把我所得到的键值传送到系统识别,从而显示出来。也就是说我所得到的键值应该放到哪个参数或函数里。 我知道我的问题很乱,呵呵 |
|
论坛版主
|
9楼#
发布于:2004-12-28 14:58
键盘驱动的框架你了解清楚了吗?我也只能大概看看,热炒热卖的喔,说错了不要怪我哈,兄弟自己看看就明白了,
从COMMON\\OAK\\DRIVERS里面的KEYBDIST.CPP的代码看,通过IST读出的键盘扫描码后(通过pfnGetKeybdEvent这个函数指针,我看了一下pb里三星bsp的例子是挂的pdd里实现的KeybdPdd_GetEventEx2,这个函数负责读出扫描码),再调用一个回调函数pfnKeybdEvent来传送到上层,这个函数应该是上层给出的,你不用管。大概就这么个过程,主要是你实现的函数需要和一些库链接在一起工作。 你现在按例子,把keybdist.lib链接到你的dll里面(其他的pdd函数也要写好),在参考例子把其他需要的库加进去(看帮助还有哪些),应该就可以工作了,至于上层怎么响应键盘消息你看看窗口的api |
|
10楼#
发布于:2005-01-07 15:41
wxl_50685330大哥
因为我做的是矩阵键盘,我用了4个中断,所以我把kbdIstLoop这个函数的源妈改成了四个参数,以实现kbdIstLoop函数中四个中断的等待,但是在编译的时候,提示出错,说kbdIstLoop这个函数不能用四个参数,那我现在改怎么实现四个中断呀,如果用四个kbdIstLoop,那怎么能保证第一个kbdIstLoop完后执行第二个kbdIstLoop呀? |
|
论坛版主
|
11楼#
发布于:2005-01-07 16:50
4个中断?不用吧,一个中断过来然后在ist里面扫描阵列就行了啊,你先说说你为什么要4个中断?
|
|
12楼#
发布于:2005-01-10 09:00
我设计的是4×5的矩阵键盘
用了四个中断来判断行 其实我现在已经知道可以用一个中断来实现 但是板子已经早做好了 再改的话就麻烦了 |
|
论坛版主
|
13楼#
发布于:2005-01-10 14:03
好好好,4个就4个,来嘛,这样:把4个中断的中断服务(ISR)返回同样一个SYSINTR(这个值是你指定给键盘的那个),这样你的IST可以响应所有键盘中断,但你要看看怎么去区分是哪行来的中断,比如去读GPIO的中断状态寄存器就行。对于对键的判断顺序,也和扫描阵列一样,需要安排一下你的判断策略,4个中断是采用循环判断,还是始终从某一个开始等等,这你要看看上层应用的需求,对某些键是不是有高优先级要求。
|
|