Linux学习:简单按键中断处理流程
来源:互联网 发布:linux搭建jenkins svn 编辑:程序博客网 时间:2024/05/20 05:46
中断处理程序中不能延时、休眠之类的,一定要最快速、高效的执行完。
// 功能:申请中断
// 参数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_HANDLEDreturn 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);... ...}
阅读全文
0 0
- Linux学习:简单按键中断处理流程
- Linux中断处理流程
- linux 中断处理流程
- Linux中断处理流程
- Linux中断处理流程
- Linux中断处理流程
- Linux中断处理流程
- Linux中断处理流程
- Linux gpio 按键中断学习
- linux中断&poll按键处理机制
- Linux内核中断处理流程
- linux Kernel中断处理流程
- linux中断的处理流程
- Linux驱动学习之:按键中断驱动
- [Linux中断]中断数据结构以及ARM处理中断流程
- arm linux 下中断流程简要分析--中断处理流程
- Linux按键驱动程序设计(2)-Linux中断处理程序
- linux中断导读之--处理流程
- 二次采样
- extern数组与extern指针
- 安装Python包,网络不可达解决方法
- linux之shell编程
- 开讲啦-记录-创业(1)
- Linux学习:简单按键中断处理流程
- Promise对象详解
- 软件管理
- sourcetree 下载 download
- ICCV-2017的论文
- linux 判断物理机/虚拟机
- 属性动画
- RSYNC安装使用详解
- k-means聚类算法