Keyboard驱动中button中断的处理机制.docx

上传人:b****7 文档编号:10774406 上传时间:2023-02-22 格式:DOCX 页数:13 大小:217.40KB
下载 相关 举报
Keyboard驱动中button中断的处理机制.docx_第1页
第1页 / 共13页
Keyboard驱动中button中断的处理机制.docx_第2页
第2页 / 共13页
Keyboard驱动中button中断的处理机制.docx_第3页
第3页 / 共13页
Keyboard驱动中button中断的处理机制.docx_第4页
第4页 / 共13页
Keyboard驱动中button中断的处理机制.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Keyboard驱动中button中断的处理机制.docx

《Keyboard驱动中button中断的处理机制.docx》由会员分享,可在线阅读,更多相关《Keyboard驱动中button中断的处理机制.docx(13页珍藏版)》请在冰豆网上搜索。

Keyboard驱动中button中断的处理机制.docx

Keyboard驱动中button中断的处理机制

Keyboard驱动中button中断的处理机制

********************************LoongEmbedded************************

作者:

LoongEmbedded(kandi)

时间:

2011.05.015

类别:

WINCE驱动开发

********************************LoongEmbedded************************

备注:

本博文基于Real6410开发板的BSP,这里按键的处理部分是作为keyboard驱动的一部分的。

1.硬件设计

图1

2.文件架构

2.1Keypad的MDD层

MDD层的入口函数DllMain()

PUBLIC\COMMON\OAK\DRIVERS\KEYBD\LAYMGR

生成:

Layout_Manager.lib

源文件:

LayMgr.cpp\

Zones.cpp\

profiler.cpp\

PUBLIC\COMMON\OAK\DRIVERS\KEYBD\NOP\PDD

生成:

Nop_KbdCommon.lib

源文件:

NopKbd.cpp

PUBLIC\COMMON\OAK\DRIVERS\KEYBD\DEVICELAYOUTS\REMAP\NUMPADRMP

生成:

NumPadRmp.lib

源文件:

NumPadRmp.cpp

2.2Keypad的PDD层

PDD层的入口点

图2

KEYBD\KeyUserDef

生成KeyPadCommon.lib

源文件:

keymatrix.cpp\

KBD.cpp\

Power.s\

KEYBD\Matrix_0409

生成S3C6410_Layout.lib

源文件s3c6410_layout.cpp

KEYBD\PddList

生成PddList.lib

源文件:

PddList.cpp

KEYBD\kbds3c6410

生成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.lib

 

3.驱动工作流程

3.1keyboard驱动的加载过程

系统启动过程中,GWES根据注册表HKEY_LOCAL_MACHINE\Hardware\DeviceMap\KEYBD下的”Drivername”下去获取KeyboardDriver的名字,如果没找到,则使用默认的名字Keybddr.dll,此系统中keyboard驱动的PDD层的laymgr.reg内容如下:

图3

然后GWES会去验证KeyboardDriver的导出接口是否存在,见图4,接下来去调用导出函数KeybdDriverInitializeEx(),对KeyboardDriver进行初始

化。

3.2smdk6410_keypad.dll的导出函数

图4

上面这些函数的定义及实现是在MDD层的PUBLIC\COMMON\OAK\DRIVERS\KEYBD中实现的,那为什么Pdd层最终导出的smdk6410_keypad.dll可以编译通过呢?

是因为此dll包含了实现这些函数的lib。

3.3MDD层和pdd层的交互

这里只是介绍本设计中按键驱动的部分,不是键盘驱动部分,系统会调用KeybdDriverInitializeEx函数,此函数主要用于初始化每个PDD的内容,调用图2的g_rgpfnPddEntries数组来调用PDD的入口函数。

从理论上,LayoutManager可以管理多个PDD层,这些PDD层会组成一个链表,而全局变量g_rgpfnPddEntries就是好来表示所有PDD层的入口。

其中按键处理的入口函数Matrix_Entry函数,下面就来看看这个函数的工作流程,如下图所示

图5

Matrix_Entry函数体如下所示:

图6

3.3.1KeybdDriverInitializeAddresses

图7

其中constDWORDKey_IRQ[10]={IRQ_EINT0,IRQ_EINT1,IRQ_EINT2,IRQ_EINT5,IRQ_EINT9,IRQ_EINT10,IRQ_EINT11,IRQ_EINT16,IRQ_EINT17,IRQ_EINT20};

3.3.2IsrThreadStart

这个函数会创建按键处理的IST函数KBDISRThread,而KBDISRThread函数通过调用KeyMatrix:

:

IsrThreadProc()来完成,KeyMatrix:

:

IsrThreadProc函数体如下

图8

下面就继续分析KeyIOInit和GetKeyValue函数

KeyIOInit函数

图9

GetKeyValue函数

先看此函数体的第一部分

图10

接着看GetKeyValue函数的后面部分

图11

参考链接:

Keyboard驱动介绍

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1