S3C6410 KeyPad驱动(下)

1.1 按键中断处理流程

1.1.1 按键扫描的处理流程

在初始状态,所有的列线(输出)处于低电平,当没有按键按下的状态时,所有的行线(输入)都是高电平(使用上拉功能)。当任何按键按下时,相应的行和列线连接在一起,并且相应的行被驱动为低电平,此时产生一个键盘中断。接着CPU(软件)通过写列数据输出寄存器KEYIFCOL向一列写入低电平,而向其他列写入高电平。在每次写入的时候,CPU读取行数据输入寄存器KEYIFRO来相应的列按键是按下,这样,当扫描处理完成后,就可以找到按下的一个或多个按键。

图24 键盘扫描初始化状态

下面假设按下按键27,是如何确定此按键的流程:

1) 当按下27键的时候,它所在的第3行输入低电平,也即GPK11输入低电平,这可通过读取KEYIFROW寄存器获知。

2) CPU通过写KEYIFCOL寄存器来写第0位为低电平,第1到第第7位为高电平,然后来读取KEYIFROW寄存器的值,这时读取到的值为11111111,没有其中一行输入为低电平,说明,按键的按键不在第0列,见下图

图25 键盘扫描处理流程II

3) 直到CPU向KEYIFCOL寄存器低八位写入11110111,这时读取到KEYIFROW寄存器低八位的值为11110111,可知第3行输入为低电平,此时对应的是扫描条件时第3列输入低电平,这样就可以判断按键在第3行和第3列交叉处的按键,从而判断了具体的按键。

4) 对于多个按键,扫描原理一样,见下图的说明。

图26键盘扫描处理流程III

1.1.2 PDD的IST处理

下面来看IST线程KeyMatrix::IsrThreadProc()的主要处理部分:、

图27 IST线程KeyMatrix::IsrThreadProc()

此IST对按键的处理流程有下面一些情况:

下面分别介绍调用到的一些函数:

1) KScan_ProcIO函数

图28 KScan_ProcIO函数体

按下第3行第3列的按键时,ChangeState[3]=0x8,这里的3是指第3列,而0x8的二进制数是00001000,表示第3行,由此根据ChangeState[3]=0x8,可以知道是按下第3行第3列的按键被按下,其他idx对应的ChangeState[idx]值是0;同理,对于按下第3行第2列的按键时有ChangeState[2]=0x8,但如果同时按下这两个按键,这ChangeState[3:2]=0x8。也就是说ChangeState数组中的idx值用来指示是哪一列的按键,而ChangeState[idx]的值(非零)用来指示是哪一行的按键。

备注:下面基于4*4的键盘来描述,其中采用了低4行(GPK8~GPK11)和高四列(GPL4~GPL7)。

2) KeybdEventCallback函数

PDD层通过调用KeybdEventCallback函数把当前device layout按下的按键的扫描码和按键状态发送给MDD层,此函数体如下:

图29 KeybdEventThreadProc函数

3) KeybdEventThreadProc线程

接收来之KeybdEventThreadProc函数发送过来的键盘事件,把扫描码转换为虚拟键码,然后发送重新映射的键盘事件给GWES,此线程主要部分如下:

图30 KeybdEventThreadProc线程

键盘驱动就先介绍到这里了,其实还有很多内容的,大家可以深入MDD层部分。

S3C6410 KeyPad驱动(下)相关推荐

  1. S3C6410 KeyPad驱动(上)

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  2. Wince6.0 s3c6410触摸屏驱动分析

    http://blog.sina.com.cn/s/blog_4b4b54da01012gbz.html Wince6.0 s3c6410触摸屏驱动分析     一.wince 触摸屏驱动概述... ...

  3. MTK Keypad驱动框架

    上一节,看完了http://blog.csdn.net/morixinguan/article/details/7717020,tpd驱动框架的实现. 那么这一节来分析下Keypad驱动框架的实现,其 ...

  4. 5G驱动下边缘计算的发展趋势与投资机会

    [行业背景] 随着5G基建在我国的落地预期进一步明晰,过往对于带宽.时延要求苛刻的业务数据的转发路径止步边缘端已经成为了行业的共识.随着AIOT和数据化转型的发展,终端智能化的需求在安防.电动汽车.消 ...

  5. QOE 驱动下的分布式实时网络构建:Agora SD-RTN™ 的演进

    编者按:近日,全球软件案例研究峰会在北京召开.全球软件案例研究峰会(简称"TOP100Summit")是科技界一年一度的案例研究榜单,每年甄选年度最值得借鉴的100个好案例,旨在揭 ...

  6. 新零售驱动下,超市购物服务系统设计策略研究

    编辑导语:新零售(New Retailing),即个人.企业以互联网为依托,通过运用大数据.人工智能等先进技术手段,对商品的生产.流通与销售过程进行升级改造,进而重塑业态结构与生态圈,并对线上服务.线 ...

  7. 数字化和网络化双重驱动下 周界安防产品迎来新变革

    近些年伴随着国民经济的持续快速发展,在政府部门大力推动及"平安城市"."奥运会"."世博会"等大型项目.活动的带动下.我国周界安防行业持续保 ...

  8. 郭效真:云计算驱动下数据中心变革的四阶段 | 阿里云发布首个物联网安全方案

    每一个企业级的人  都置顶了 中国软件网 中国软件网  为你带来最新鲜的行业干货 小编点评 最近小编的胖友圈 都要被阿里刷屏啦 从马云去做客服 阿里云发布首个物联网安全方案 每天都有大事情 小编表示很 ...

  9. 英语?工科生的“痛”:ESP(专门用途英语)驱动下的英语学习

    本人大学英语翻译专业,目前从事针对研究生以及一些社会人士的英语教学与翻译工作!其中在教学的过程,我发现工科生群体在英语这一板块的学习存在很大的障碍.本人的对象就是一名从事技术类的工科男!他本人很想学好 ...

最新文章

  1. Linux13-计划任务crontab
  2. Leetcode | Maximal Rectangle
  3. 腾讯绝地求生手游席卷全球,104个国家地区IOS登顶
  4. 我的一点企业做云经验
  5. 火星上首座虚拟房屋以超过50万美元价格售出
  6. 关于重定向页面和请求转发页面的区别
  7. 中英文对照 —— 手机 App/PC 端软件(系统)、互联网
  8. 查看EXE/DLL文件是32/64位之通用方法
  9. 陶哲轩:一个华裔数学天才的传奇
  10. 最简单PS双重曝光效果制作教程
  11. 计算机网络路由器和网关设置路由器,【计算机网络】网关和路由器功能的有哪些不同...
  12. 小程序_OTA升级的一些情况说明
  13. python检测图像中的矩形_详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
  14. oracle中字体倒转,Oracle特殊查询 行列倒转 分页
  15. 苹果4s手机装 java微信_苹果4s版本过低不能下载微信怎么安装旧版本的
  16. css悬停动画,CSS卡片悬停动画效果实现
  17. 一些常见的AAC编解码库
  18. 实用最优化方法课后习题-第二章
  19. A 0.18um CMOS SOC for a 100-m-Range 10-Frame/s 200x96 pixel time-of-flight Depth Sensor翻译
  20. 华为云SNAT 操作(脚本执行)

热门文章

  1. jvm有哪些内存区域
  2. ipynb和py文件一样吗_文件描述符了解一下
  3. js list添加元素_JS基础与常用函数
  4. Android多媒体编程
  5. Ubuntu系统安装VNC(VNCViewer)
  6. FTP搭建网络yum源
  7. 计算机知识浩瀚,计算机视觉基础
  8. excel公式 某一个单元格等于另一个单元格的值_15个excel小技巧,简单易学,一看就会,收藏备用吧...
  9. java web系统拆分_Java系统中如何拆分同步和异步
  10. java query接口_「软帝学院」Java零基础学习详解