完善资料让更多小伙伴认识你,还能领取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; } |
|
|
相关推荐
|
|
|
感谢楼主分享,写的非常好!赞!学习了
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37376 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6775 浏览 1 评论
7793 浏览 1 评论
7642 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5071 浏览 0 评论
1556浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1208浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
749浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
735浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
678浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:26 , Processed in 0.607332 second(s), Total 68, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖