首先简单说说这个键盘的实现原理,IIC总线工作原理没必要废话,s3c2410的手册中讲的很明白。硬件方面这个键盘通过一个AVR单片机(ATMEGA48)接在IIC总线上,也就是说,直接与IIC总线链接的设备并不是我们用的键盘,而是这个单片机,键盘产生的一切数据由这个单片机经过加工包装成一定的数据结构再发给s3c2410。当s3c2410芯片收到数据后会由IIC控制器触发一个中断,在中断处理程序中我们只要解析这个结构体就可以了。

软件方面,设备驱动实际上分为两层,其中之一就是AVR单片机的驱动,另一个就是键盘驱动,基本流程如下。内核启动时会自动调用设备初始化函数,这时候我们需要做的是通过IIC总线给这个单片机传送初始化信息。发送的数据一共包括两部分,前者用于设置目的设备(s3c2410芯片)的地址,也就是告诉AVR单片机收到键盘发来的数据后应该发给谁;后者是使能键盘,如果不发这个指令,AVR收到键盘传来的按键硬件编码后直接丢弃。(这里注意:AVR上可以同时管理多个设备,事实上我搞到的前人的资料也是支持多个设备,而这里我们只用到了一个键盘)完成初始化后,硬件方面就没有什么障碍了,如果我们按下一个按键,键盘会把一个8位的硬件键码发给AVR单片机。在AVR单片机中这个字节前会被再加上一个8位的设备编号,然后一起发给s3c2410。

//从下面开始有点没捋顺清楚

cpu收到数据后,会把自己的工作模式设置成SR,然后调用AVR单片机驱动中的i2c_mega8_slvRcv函数,并把接收到的后两个字节(键盘的设备码+按键硬件码)作为参数传给该函数。在该函数中,检测设备码,如果是键盘,那么调用键盘驱动程序中的mega8_kbd_raw函数,并最终添加入按键等待队列。当有程序打开键盘设备文件的时候,这个队列中的键码会被传递给相应的用户程序。

[转帖]armlinux学习笔记--LCD驱动程序分析

/

#define Fld(Size, Shft) (((Size)

<< 16) (Shft))

例:Fld(2,5); = 0x20005

#define FSize(Field) ((Field)

>> 16)

例:FSize(0x20005); = 2

#define FShft(Field) ((Field)

& 0x0000FFFF)

例:FShft(0x20005); = 5

#define FInsrt(Value, Field) \\

(UData (Value) << FShft (Field))

例:FInsrt(0x3, 0x20005); = 0x3

<< 0x0005 = 0x60

iic键盘驱动 android,IIC的键盘驱动相关推荐

  1. android音量加减驱动,android下调试声卡驱动之概述

    在Android中音频系统使用的是ALSA系统架构.ASoC--ALSA System on Chip .是建立在标准ALSA驱动层上,为了更好地支持 嵌入式处理器和移动设备中的音频Codec的一套软 ...

  2. android 表情键盘切换,Android仿微信键盘切换效果

    Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换. 效果图如下: ...

  3. android自定义键盘开源,Android自定义软键盘的设计与实现代码

    偶然间发现了Android.inputmethodservice.Keyboard类,即android可以自定义键盘类,做了一个简单例子供大家参考. 效果如下: 先看界面布局文件 android:la ...

  4. android显示输入法键盘布局,android 解决输入法键盘遮盖布局问题

    这里采用滚动布局来解决输入法遮盖布局的问题,方法如下: /** * @param root 最外层布局,需要调整的布局 * @param scrollToView 被键盘遮挡的scrollToView ...

  5. android获得键盘高度,Android获取软键盘高度

    在 Android 里我们是无法直接获取软键盘高度的,但是在某些场景下,我们又需要获取软键盘的高度.我们可以使用 ViewTreeObserver.OnGlobalLayoutListener来监听窗 ...

  6. android键盘ui,android – 在自定义键盘中重新调整候选视图的UI

    我正在使用自定义键盘.我在onCreateCandidatesView()中设置了setCandidatesViewShown(true)函数,问题是UI没有得到正确的重新调整. 任何帮助都会很棒.以 ...

  7. Android 12.0 通过驱动实现禁用usb鼠标和usb键盘功能

    1.1概述 在12.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标 ...

  8. 永嘉原*厂-VK1Q68D 是低功耗LED显示/数码管显示驱动IC,带键盘扫描电路,4~7 位,10~13 段 显示,QFN24 4*4MM超小体积封装

    型号:VK1Q68D 品牌:VINKA/永嘉微电 封装:QFN24L(4*4MM) 概述 VK1Q68D 是1/5-1/8 占空比的 LED 显示控制驱动电路.由 10 根段输出.4 根栅输出.3 根 ...

  9. LED数显驱动芯片,LED数码管驱动芯片VK1650,LED驱动控制IC,键盘扫描集成电路,内置RC震荡电路

    VINKA/永嘉微电LED显示屏驱动主要应用于以下: 1:VCR.VCD.DVD 及家庭影院等显示屏驱动. 2:电磁炉.微波炉.冰箱.空调 .家庭影院等高段位显示屏驱动. 3:LED显示屏驱动,电子秤 ...

最新文章

  1. Struts 2.5.20 在Eclipse配置
  2. Dubbo 跨语言调用神兽:dubbo-go-pixiu
  3. 检测网络变化(wifi、2g、3g、4g)
  4. 水体专题图和土地利用专题图制作
  5. WAPPUSH 原理 基于短信网关WAP推送的实现
  6. 风格迁移篇--CCPL:Contrastive Coherence Preserving Loss for Versatile Style Transfer多功能风格转换的对比连贯保持损失
  7. 下载并安装JDK7 教程
  8. Android应用源码之仿墨迹天气插件
  9. 千万不要急着 返城上班!
  10. Sap hana 升级思路
  11. 「BJOI 2019」排兵布阵
  12. linux查看进程家族树,3.1.6 进程家族树
  13. 拉普拉斯矩阵(Laplacian matrix)的求解
  14. 微信小程录制视频上传服务器,微信小程序-从相册获取图片,视频使用相机拍照,录像上传+服务器nodejs版接收-微信小程序视频上传功能-微信小程序视频上传...
  15. python怎样使用各个日期赤纬_行星的上合、下合、大冲、大距、方照、逆行、合月时间计算...
  16. win休眠模式+定时休眠
  17. STM32硬件SPI通过fm17550读取身份证UID,识别银行卡,识别TYPEA与TYPEB
  18. 微信摇一摇插件ios_苹果ios微信摇一摇代码实现
  19. 谭浩强-习题6.10
  20. 双壳层膦酰基修饰二氧化硅磁性微球/氮氧自由基接枝/表面KH-550改性二氧化硅微球的研究

热门文章

  1. FAQ02【Hive】:Hive连接后出现一堆乱七八糟的日志
  2. When you are old
  3. React中使用useState数据异步问题解决方法
  4. Hi,你想要的在线创建架构图都在这儿!(四)
  5. Anchor free系列检测器之YOLOX源码逐行讲解篇(七)--Head中loss的计算及反传
  6. 中原建业冲刺上市的喜与忧:外拓小有成就,增长却逐渐放缓
  7. php+mysql简单小项目
  8. MySQL查询不同年份母亲节_历年母亲节谷歌doodle有什么不同 google母亲节logo变化史...
  9. CSS文本溢出用...显示
  10. 1.致远OA二次开发G6 A6 A8 本机软件安装