频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

12.1.4 按键设备驱动中断、定时器处理程序

作者: 宋宝华 编著 出处:人民邮电出版社  2008-03-10 12:31    砖    好    评论   进入论坛
阅读提示:《Linux设备驱动开发详解》本书全面而详细地讲解了Linux设备驱动开发中涉及的理论以及多种设备驱动的框架。第12章将分析5个典型的字符设备驱动,在这些驱动中,将灵活地运用到前面各章所讲解的内容。本文写的是按键设备驱动中断、定时器处理程序。

12.1.4  按键设备驱动中断、定时器处理程序

在键被按下后,将发生中断,在中断处理程序中,应该关闭中断进入查询模式,延迟20ms以实现去抖动,如代码清单12.8所示,这个中断处理过程只包含顶半部,无底半部。

代码清单12.8  按键设备驱动的中断处理程序

1 static void s3c2410_eint_key(int irq, void *dev_id, struct pt_regs *reg)
2 {
3   int key = dev_id;
4   disable_irq(key_info_tab[key].irq_no); //关中断,转入查询模式
5 
6   keydev.keyStatus[key] = KEYSTATUS_DOWNX;//状态为按下
7   key_timer[key].expires == jiffies + KEY_TIMER_DELAY1;//延迟
8   add_timer(&key_timer[key]); //启动定时器
9 }

在定时器处理程序中,查询按键是否仍然被按下,如果是被按下的状态,则将该按键记录入缓冲区。同时启动新的定时器延迟,延迟一个相对于去抖更长的时间(如100ms),每次定时器到期后,查询按键是否仍然处于按下状态,如果是,则重新启用新的100ms延迟;若查询到已经没有按下,则认定键已抬起,这个时候应该开启对应按键的中断,等待新的按键。每次记录新的键值时,应唤醒等待队列。定时器处理流程如图12.3所示,代码清单如12.9所示。

代码清单12.9  按键设备驱动的定时器处理函数

1  static void key_timer_handler(unsigned long data)
2  {
3    int key = data;
4    if (ISKEY_DOWN(key))
5    {
6      if (keydev.keyStatus[key] == KEYSTATUS_DOWNX)
7      //从中断进入
8      {
9        keydev.keyStatus[key] = KEYSTATUS_DOWN;
10       key_timer[key].expires == jiffies + KEY_TIMER_DELAY; //延迟
11       keyEvent();   //记录键值,唤醒等待队列
12       add_timer(&key_timer[key]);
13     }
14     else
15     {
16       key_timer[key].expires == jiffies + KEY_TIMER_DELAY; //延迟
17       add_timer(&key_timer[key]);
18     }
19   }
20   else       //键已抬起
21   {
22     keydev.keyStatus[key] = KEYSTATUS_UP;
23     enable_irq(key_info_tab[key].irq_no);
24   }
25 }

图12.3 定时器处理函数流程

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
专题
Linux——从菜鸟到高手
Visual Studio 2005开发基础
测试开发人员参考手册
Groovy开发技术
VC++基础开发专题
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。