主题 : tiny4412中断号是怎么产生的 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 101173
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
综合积分: 26 分
注册时间: 2014-03-04
最后登录: 2014-04-20
楼主  发表于: 2014-04-14 20:19

 tiny4412中断号是怎么产生的

Tiny4412_buttons.c (linux-3.5\drivers\char)文件中 tiny4412_buttons_open()中加一条printk打印语句,如下红色字体所示,显示申请的中断号

static int tiny4412_buttons_open(struct inode *inode, struct file *file)
{
    int irq;
    int i;
    int err = 0;

    for (i = 0; i < ARRAY_SIZE(buttons); i++) {
        if (!buttons.gpio)
            continue;

        setup_timer(&buttons.timer, tiny4412_buttons_timer,
                (unsigned long)&buttons);

        irq = gpio_to_irq(buttons.gpio);
        printk(KERN_ALERT "buttons[%d].gpio=%d  interruptible is:%d \n",i,buttons.gpio,irq);
        err = request_irq(irq, button_interrupt, IRQ_TYPE_EDGE_BOTH,
                buttons.name, (void *)&buttons);
        if (err)
            break;
    }

    if (err) {
        i--;
        for (; i >= 0; i--) {
            if (!buttons.gpio)
                continue;

            irq = gpio_to_irq(buttons.gpio);
            disable_irq(irq);
            free_irq(irq, (void *)&buttons);

            del_timer_sync(&buttons.timer);
        }

        return -EBUSY;
    }

    ev_press = 1;
    return 0;
}

打开按键设备时显示申请的中断号如下:
442:          0  exynos-eint  KEY0
443:          0  exynos-eint  KEY1
444:          1  exynos-eint  KEY2
445:          1  exynos-eint  KEY3

tiny4412中断有160个,但现在申请的中断号是442-445,这些中断号是怎么产生的呢?原理是什么呢?
级别: 新手上路
UID: 23644
精华: 0
发帖: 44
金钱: 220 两
威望: 44 点
综合积分: 88 分
注册时间: 2010-06-23
最后登录: 2017-09-13
1楼  发表于: 2014-04-25 17:21
这个驱动怎么使用,我加载了这个驱动,写了个测试程序,.设备都打不开
shell@android:/data/app # ./testbuttons
[  917.665000] genirq: Flags mismatch irq 442. 00000003 (KEY0) vs. 00000003 (gpi
o_keys)
open device buttons: Device or resource busy
级别: 侠客
UID: 25875
精华: 0
发帖: 80
金钱: 402 两
威望: 80 点
综合积分: 160 分
注册时间: 2010-07-30
最后登录: 2020-07-04
2楼  发表于: 2014-10-19 00:00