Keyboard驱动中button中断的处理机制.docx_第1页
Keyboard驱动中button中断的处理机制.docx_第2页
Keyboard驱动中button中断的处理机制.docx_第3页
Keyboard驱动中button中断的处理机制.docx_第4页
Keyboard驱动中button中断的处理机制.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Keyboard驱动中button中断的处理机制*LoongEmbedded*作者:LoongEmbedded(kandi)时间:2011.05.015类别:WINCE驱动开发*LoongEmbedded*备注:本博文基于Real6410开发板的BSP,这里按键的处理部分是作为keyboard驱动的一部分的。1. 硬件设计图12. 文件架构2.1 Keypad的MDD层MDD层的入口函数DllMain()PUBLICCOMMONOAKDRIVERSKEYBDLAYMGR生成:Layout_Manager.lib源文件:LayMgr.cppZones.cppprofiler.cppPUBLICCOMMONOAKDRIVERSKEYBDNOPPDD生成:Nop_KbdCommon.lib源文件:NopKbd.cppPUBLICCOMMONOAKDRIVERSKEYBDDEVICELAYOUTSREMAPNUMPADRMP生成:NumPadRmp.lib源文件:NumPadRmp.cpp2.2 Keypad的PDD层PDD层的入口点图2KEYBDKeyUserDef生成KeyPadCommon.lib源文件:keymatrix.cpp KBD.cpp Power.s KEYBDMatrix_0409生成S3C6410_Layout.lib源文件s3c6410_layout.cppKEYBDPddList生成PddList.lib源文件:PddList.cppKEYBDkbds3c6410生成smdk6410_keypad.dll,此dll的入口函数是DllMain(),此dll需要连接一些lib,如下:SOURCELIBS= $(_TARGETPLATROOT)lib$(_CPUINDPATH)S3C6410_Layout.lib $(_TARGETPLATROOT)lib$(_CPUINDPATH)KeyPadcommon.lib $(_TARGETPLATROOT)lib$(_CPUINDPATH)PddList.lib $(_COMMONOAKROOT)lib$(_CPUINDPATH)LayoutManager.lib $(_COMMONOAKROOT)lib$(_CPUINDPATH)Nop_KbdCommon.lib $(_COMMONOAKROOT)lib$(_CPUINDPATH)NumPadRmp.lib3. 驱动工作流程3.1 keyboard驱动的加载过程系统启动过程中,GWES根据注册表HKEY_LOCAL_MACHINEHardwareDeviceMapKEYBD 下的”Drivername”下去获取Keyboard Driver的名字,如果没找到,则使用默认的名字Keybddr.dll,此系统中keyboard驱动的PDD层的laymgr.reg内容如下:图3然后GWES会去验证Keyboard Driver的导出接口是否存在,见图4,接下来去调用导出函数KeybdDriverInitializeEx(),对Keyboard Driver进行初始化。3.2 smdk6410_keypad.dll的导出函数图4上面这些函数的定义及实现是在MDD层的PUBLICCOMMONOAKDRIVERSKEYBD中实现的,那为什么Pdd层最终导出的smdk6410_keypad.dll可以编译通过呢?是因为此dll包含了实现这些函数的lib。3.3 MDD层和pdd层的交互这里只是介绍本设计中按键驱动的部分,不是键盘驱动部分,系统会调用KeybdDriverInitializeEx函数,此函数主要用于初始化每个PDD的内容,调用图2的g_rgpfnPddEntries数组来调用PDD的入口函数。从理论上,Layout Manager可以管理多个PDD层,这些PDD层会组成一个链表,而全局变量g_rgpfnPddEntries就是好来表示所有PDD层的入口。其中按键处理的入口函数Matrix_Entry函数,下面就来看看这个函数的工作流程,如下图所示图5Matrix_Entry函数体如下所示:图63.3.1 KeybdDriverInitializeAddresses图7其中const DWORD Key_IRQ10 = IRQ_EINT0,IRQ_EINT1,IRQ_EINT2,IRQ_EINT5,IRQ_EINT9,IRQ_EINT10,IRQ_EINT11,IRQ_EINT16,IRQ_EINT17,IRQ_EINT20;3.3.2 IsrThreadStart这个函数会创建按键处理的IST函数KBDISRThread,而KBDISRThread函数通过调用KeyMatrix:IsrThreadProc()来完成,KeyMatrix:IsrThreadProc函数体如下图8下面就继续分析KeyIOInit和GetKeyValue函数KeyIOInit函数图9GetKeyValue函数先看此函数体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论