Linux学习:简单按键中断处理流程
2017-10-26 10:13
531 查看
中断处理程序中不能延时、休眠之类的,一定要最快速、高效的执行完。
// 功能:申请中断
// 参数1:中断号码,通过宏 IRA_EINT(x) 获取
// 参数2:中断的处理函数,填函数名
// 参数3:中断的出发方式(下面的宏在不同内核中是不同的)
#define IRQF_TRIGGER_NONE 0x00000000
#define IRQF_TRIGGER_RISING 0x00000001
#define IRQF_TRIGGER_FALLING 0x00000002
#define IRQF_TRIGGER_HIGH 0x00000004
#define IRQF_TRIGGER_LOW 0x00000008
// 参数4:描述语句,给此中断起名,自定义
// 参数5:传递给中断处理函数的参数,没有填NULL
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev_id);
// 功能:释放中断
// 参数1:中断号,与 request_irq 函数的第一个参数一致
// 参数2:一定要与 request_irq 中最后一个参数一致
void free_irq(unsigned int irq, void *dev_id);
用法:
// 功能:申请中断
// 参数1:中断号码,通过宏 IRA_EINT(x) 获取
// 参数2:中断的处理函数,填函数名
// 参数3:中断的出发方式(下面的宏在不同内核中是不同的)
#define IRQF_TRIGGER_NONE 0x00000000
#define IRQF_TRIGGER_RISING 0x00000001
#define IRQF_TRIGGER_FALLING 0x00000002
#define IRQF_TRIGGER_HIGH 0x00000004
#define IRQF_TRIGGER_LOW 0x00000008
// 参数4:描述语句,给此中断起名,自定义
// 参数5:传递给中断处理函数的参数,没有填NULL
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev_id);
// 功能:释放中断
// 参数1:中断号,与 request_irq 函数的第一个参数一致
// 参数2:一定要与 request_irq 中最后一个参数一致
void free_irq(unsigned int irq, void *dev_id);
用法:
// 中断处理程序,多个按键可以根据 irqno 区分 irqreturn_t key_irq_handler(int irqno, void *dev_id) { int ret; printk("------------%s-------------\n", __FUNCTION__); ret = gpio_get_value(key_info[i].key_gpio); ret ? (key_dev->key.value = 0) : (key_dev->key.value = 1); printk("key = %d status = %d\n", key_dev->key.name, key_dev->key.value); // 返回值一定要是 IRQ_HANDLED return IRQ_HANDLED; } static int __init key_drv_init(void) { ... ... key_dev->irqno = IRQ_EINT(2); ret = request_irq(key_dev->irqno, key_irq_handler, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "key_eint", NULL); ... ... } static int __exit key_drv_exit(void) { ... ... free_irq(key_dev->irqno,NULL); ... ... }
相关文章推荐
- 嵌入式学习-驱动开发-lesson3-混杂设备驱动模型与linux中断处理流程
- Linux设备驱动程序学习(11)-中断处理
- linux下 简单学习epoll处理海量链接
- linux下 简单学习epoll处理海量链接
- linux驱动学习--第十七天:第十章 Linux 中断与时钟 (二)概念、流程和框架(2013-06-19 22:31)
- linux 中断处理流程
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(4)-向现存写数据并响应时钟中断
- Linux中断处理流程
- 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)
- Linux中断处理流程
- linux中断的处理流程
- linux for arm的中断处理流程[转载自:http://hi.baidu.com/wudx05/blog/item/5314935c834f4e41fbf2c0dc.html]
- linux下 简单学习epoll处理海量链接
- 木其工作室(专业程序代写服务)[转]Linux设备驱动程序学习-中断处理
- 【转载】Linux中断处理学习笔记
- Linux中断处理学习笔记
- 字符设备驱动笔记——中断方式按键驱动之linux中断处理结构(五)
- Linux中断处理流程
- Linux设备驱动程序学习-中断处理
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(4)-向现存写数据并响应时钟中断