3+1键盘驱动学习 (fgsink@gmailcom) 实验环境: 键盘的实现 键盘 .docVIP

3+1键盘驱动学习 (fgsink@gmailcom) 实验环境: 键盘的实现 键盘 .doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
31键盘驱动学习(fgsink@gmailcom)实验环境:键盘的实现键盘

3+1键盘驱动学习 (fgsink@) 实验环境: 2 键盘的实现 2 键盘原理图: 2 键盘使用引脚资源: 2 键盘原理分析: 2 驱动分析: 3 一、文件中包含的函数列表 3 二、函数层次关系 3 三、各函数分析 4 1、file_operations结构体 4 2、初始化工作 5 3、当有键被按下时发生了什么 5 4、当应用程序调用了read(fd,buf,2)时发生了什么 7 程序 8 实验环境: 硬件:Mini4020 v1.1 软件:U-Boot 1.3.3 Linux version 2.6.16 (root@localhost.localdomain) (gcc version 3.4.1) SEP4020 ARM Linux-2.6.16 SDK 3.1 nfs: MINI4020资料光盘\Mini4020 SDK开发软件包\Mini4020\nfs 编译内核 Linux-v3.4 编译器:arm-linux-gcc version 3.4.1 键盘驱动文件:sep4020_key.c (见附件) 键盘的实现 键盘原理图: 键盘使用引脚资源: 键盘原理分析: 初始化键盘时,将ROW1,ROW2,ROW3三条线输出高电平,如果有键被按下,三极管基极变为高电平,三极管导通,集电极被拉低,产生一个下降沿,触发中断,进入中断程序。 扫描时,输出ROW[1:3]=100,若INT0还是低电平,则是第一行有键被按下,否则输出ROW[1:3]=010,查第二行是否有键被按下,INT0为低电平,第二行有键被按下,否则输出ROW[1:3]=001,记录行号。假设是第一行有键被按下(row=0),即输出ROW[1:3]=100,再将管脚方向改为ROW1输出,ROW2输入,ROW3输入,保持ROW1输出高电平,此时读ROW2和ROW3,若ROW[3:2]=00,则K1被按下(col=0);若ROW[3:2]=01,则K2被按下(col=1);若ROW[3:2]=10,则K3被按下(col=2)。计算公式keynum=row*3+col。假设K3被按下则row=0,col=2键值应该为keynum=0*3+2=2。 驱动分析: 一、文件中包含的函数列表 //硬件操作函数: static void unmaskkey(void) //开启键盘中断 static void maskkey(void) //关闭键盘中断 static void sep4020_key_setup(void)//初始化中断 static void write_row(int index,int HighLow) static int ReadCol(void) void row_input(int x) int read_col(int x) static int keyevent(void) static int sep4020_request_irqs(void)//向内核申请中断,并将中断服务子程序注册进去 static void sep4020_free_irqs(void)//告诉内核释放硬件中断 static void key_timer_handler(unsigned long arg) static irqreturn_t sep4020_key_irqhandler(int irq, void *dev_id, struct pt_regs *reg) //驱动与操作系统接口函数 static int sep4020_key_open(struct inode *inode, struct file *filp) static ssize_t sep4020_key_read(struct file *filp, char __user *buff, size_t size, loff_t *ppos) static ssize_t sep4020_key_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos) static int sep4020_key_release(struct inode *inode, struct file *filp) static int __init sep4020_key_init(void) static void __exit sep4020_key_exit(void) module_init(sep4020_ke

文档评论(0)

wujianz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档