完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 qq448309212947 于 2015-11-21 11:26 编辑
定时器按键去抖 驱动程序 static DECLARE_WAIT_QUEUE_HEAD(button_waitq); static volatile int ev_press = 0; static unsigned char value; static DECLARE_MUTEX(button_lock); static struct pin_desc *irq_pd; 定义IO口结构体 static struct timer_list button_timer; /*增加定时器定义结构体*/ static irqreturn_t buttons_irq(int irq, void *dev_id) /*按键中断服务程序用来增加定时器时间*/ { irq_pd = (struct pin_desc *)dev_id; /*暂存驱动id*/ mod_timer(&button_timer, jiffies+HZ/100); /*增加定时器中断发生时间*/ //按键抖动产生的中断会增加定时器发生中断的时间 //按键稳定时定时器产生中断才会响应处理函数 return IRQ_RETVAL(IRQ_HANDLED); } static void button_timer_function(unsigned long data) /*定义定时器中断处理函数*/——处理按键值 { struct desc* pindesc = (struct desc*)irq_pd; unsigned int pinval; if(!pindesc) /*由于没有定义定时器初值,因此第一次产生的中断应忽略*/ return; pinval = gpio_get_value(pindesc->pin); if(pinval) { value = 0x80|pindesc->value; } else { value = pindesc->value; } ev_press = 1; wake_up_interruptible(&button_waitq); } static int __init gpio_init(void) { init_timer(&button_timer); /*初始化定时器*/ button_timer.function = button_timer_function; /*添加定时器中断处理函数*/ add_timer(&button_timer); /*添加定时器至内核定时器中断列表中*/ misc_register(&gpio_miscdev); printk(DEVICE_NAME" up. n"); return 0; } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1934个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36421 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4928 浏览 1 评论
6109 浏览 1 评论
6819 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4249 浏览 0 评论
653浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
646浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
647浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
736浏览 2评论
848浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 09:48 , Processed in 1.165618 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号