/* 可参考gpio_kyes.c */
/*
* 所有通用的工作都由上层核心程序做了
*/
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <linux/input.h>
#include <linux/device.h>
/* 由它把按钮中断的信息综合起来 */
struct pin_desc
{
int irq; /* 中断号,中断号唯一表示一个中断 */
char* name; /* 名称 */
unsigned long pin;
unsigned long key_val;
};
/*指定4个按键的信息*/
static struct pin_desc pins_desc [] =
{
{IRQ_EINT8, "KEY1", S3C2410_GPG(0), KEY_L}, /* K1 */
{IRQ_EINT11, "KEY2", S3C2410_GPG(3), KEY_S}, /* K2 */
{IRQ_EINT13, "KEY3", S3C2410_GPG(5), KEY_ENTER}, /* K3 */
{IRQ_EINT14, "KEY4", S3C2410_GPG(6), KEY_LEFTSHIFT},/* K4 */
};
static struct input_dev *buttons_dev;
static struct pin_desc *irq_pd;
static struct timer_list buttons_timer;
static irqreturn_t buttons_interrupt(int irq, void* dev_id)
{
irq_pd = (struct pin_desc *)dev_id;
/*
* jiffies为全局变量
* 每隔10毫秒,产生一个系统始终中断,jiffies就会自动累加1
* HZ=1秒,1HZ里jiffies会增加100,这里我们设置10毫秒后启动定时器
* 1秒/100 = 10毫秒,所以这里的超时时间 = jiffies+HZ/100
* 如,当前jiffies = 50,而超时时间 = jiffies+HZ/100 = 51,
* 即10毫秒后,或者是下一个
linux输入子系统, 按键输入驱动程序
最新推荐文章于 2024-06-14 21:19:09 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)