Linux下的共享外设中断|等待队列|通过中断实现按键消抖

一、Linux下中断的简单使用步骤

1.包含相关的头文件

#include <linux/irq.h>
#include <linux/interrupt.h>

2. 申请中断号

int gpio_to_irq(unsigned gpio)

3.注册中断服务函数

int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
函数参数
irq: 中断号
irq_handler_t:
irqreturn_t (*irq_handler_t)(int, void *)
函数参数
int: 产生中断的中断号
void *: 传递给中断服务函数的参数
函数返回值
我们不用, 给个 0 即可
flags: 中断触发标志
IRQ_TYPE_EDGE_RISING --- 上升沿触发
IRQ_TYPE_EDGE_FALLING --- 下降沿触发
IRQ_TYPE_EDGE_BOTH --- 双边沿
因为后续会学到输入子系统 --- 如果用上升沿触发, 判断条件可能有问题
name: 无所谓, 尽可能有意义
dev: 传递给中断服务函数的参数
不传参填 NULL
函数返回值
成功返回 0, 失败返回负数
注意: 返回值需要承接, 不承接会报警告
 

5.释放中断
 

void *free_irq(unsigned int irq, void *dev_id)

 二、等待队列

等待队列用于解决内核阻塞问题
等待队列的使用
第一步: 等待队列的申请
第二步: 阻塞
第三步: 释放
1.包含相关头文件

#include <linux/wait.h>
#include <linux/sched.h>

 2.等待队列的申请

DECLARE_WAIT_QUEUE_HEAD(name);
name: 表示等待队列的名字

3.等待队列的阻塞

wa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值