原创 字符设备驱动之中断

2013-7-23 15:11 1173 13 14 分类: 消费电子

        本章以按键驱动程序的编写为例来说明字符设备驱动编写中如何加入中断功能。继上一章中杂项设备驱动的编写方法,在编写带有中断的字符设备驱动时,需要在open()设备文件时配置设备中断之后申请中断(request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)),其中参数irq在此表示外部中断号;handler在此表示中断处理函数指针;flags在此表示中断触发条件;dev在此表示传递给handler的参数。当close()设备文件时需要释放中断(free_irq(unsigned int irq, void *(参数未知)))。下面将编写好的驱动文件(tiny210_buttons.c)编译成内核模块并动态加载。之后运行buttons可执行程序观察实验现象如图20:

clip_image001.gif

图20

按下按键后现象如图21:

clip_image001.gif

图21

上面的测试程序每间隔5s钟读取一次按键信息,不能及时响应按键,而且按键驱动程序中不带有去抖动功能。为此可以编写更可靠的驱动程序。具体编写思路如下:在发生按键中断时启动一个定时器定时毫秒级别,定时时间到了之后读取按键对应IO口状态以实现软件延时去抖动的功能;为了实时响应按键还可以以阻塞方式读取按键键值信息,一旦发现有按键中断解除阻塞并获取按键键值,为此我们需要在读取设备数据的驱动函数中等待按键事件,在延时去抖动延时到来之后释放等待进程队列。下面将修改后的按键驱动程序(mini210_buttons.c)重新编译并动态加载后运行测试程序观察实验现象如图22:

clip_image001.jpg

图22

文章评论1条评论)

登录后参与讨论

用户1602177 2013-8-27 16:53

多谢分享~~
相关推荐阅读
462629051_256703759 2014-06-08 21:56
产品研发的一点想法
        产品研发的核心是产品,研发是为了实现产品,所以能够快速设计出稳定的产品才是研发的目的。通过对比自己身边的一些项目产生了一些想法,总体来说就是尽可能采用半导体厂商的最成熟方案尽可能和...
462629051_256703759 2014-03-01 12:34
LED子系统
        Linux驱动中已经将led驱动作为一个子系统来实现了,针对Tiny210采用通用IO口来控制led的情况,linux采用platform驱动来实现led子系统,因此我们可以通过l...
462629051_256703759 2014-02-27 22:47
git入门
15.1、安装git $sudo apt-get install git $sudo apt-get install git-core 更新git $git clone git:/...
462629051_256703759 2014-02-27 15:05
Vim + Ctags + Taglist组合
12.1、Ctags和Taglist插件的安装: 12.1.1、Ctags插件的安装:sudo apt-get install ctags 12.1.2、Taglist插件的安装:首先下载...
462629051_256703759 2013-09-23 15:57
改善电源负载瞬态响应性能的设计方法
        以前对电源芯片的理解停留在输出电压是否满足需求、输出电流是否满足负载等一些静态的参数上,但是后来发现即使这些参数满足要求所选用的电源芯片有可能还是不能满足负载瞬变时的波动,所以就查...
462629051_256703759 2013-09-05 14:33
MSP430两种串口升级方式对比
        早上收到网友咨询MSP430单片机串口升级问题的邮件,因为不是第一次收到这样的帮助请求,于是便把自己做过的两种串口升级方式做一对比希望对此问题感兴趣的工程师朋友可以从中受益,也希望...
我要评论
1
13
关闭 站长推荐上一条 /2 下一条