kernel359 发表于 2013-09-30 14:09

gpio复用作中断,但没能显示,采取过一些办法,但问题没解决


问题过程:

      在写一个android手机触摸屏的驱动,如下:

      #define GPIO_RET17//reset
      #define GPIO_IRQ   18 //irq

      ........................

      ........................

   
      irq=gpio_to_irq(GPIO_IRQ);
      printk("irq---------%d\n",irq);//最后查log的时候,这输出了一个值335

      .......................

   request_threaded_irq(irq, NULL, my_thread_fn, xxx, xxxx, xxxx); //测过这的返回值,是0

问题:

    从上面的过程和log可以看出来,中断应该是正确申请了,但当
    cat/proc/interrupts的时候,并没有335这个中断


采用过的方法:

    1、自己给irq赋一个值,传到 request_threaded_irq,结果是不能 随便写,我个人理解是gpio这与
         irq应该有一个对应关系,所以不能写,不知对不对?

    2、换一个GPIO号,把GPIO_RET 传给gpio_to_irq,后面不变。cat/proc/interrupts能看到中断,
      但找不到设备。

   
   我对驱动接触比较初级,遇到上述问题,采取了我能想到的办法,但最终都没能解决问题,不知哪位对这方面比较了解,望指导一二,在此非常感谢!


knightlyj 发表于 2013-10-10 17:07

1.对,不同GPIO对应不同中断号,不过之前在新塘的MCU上见过不同IO使用同一中断向量,然后根据寄存器值区分是哪个GPIO的中断,此时应该是同一中断号,驱动自己判断吧
2.根据你的测试,可能是中断号弄错了, 你可以试试这个proc中显示的GPIO能否进入ISR(这里可能叫IST?)

理解有错误的话,希望大家指出
PS:我没用过request_threaded_irq,只用过request_irq.

kernel359 发表于 2013-10-11 16:18

回复 2# knightlyj

谢谢,很有帮助!
另外request_threaded_irq只是对request_irq做了一个非常简单的封装。

static inline int __must_check
request_threaded_irq(unsigned int irq, irq_handler_t handler,
                     irq_handler_t thread_fn,
                     unsigned long flags, const char *name, void *dev)
{
        return request_irq(irq, handler, flags, name, dev);
}


   

kernel359 发表于 2013-10-15 09:40

回复 2# knightlyj


    这个问题疑惑了很久,最后弄明白,原来是电压问题,有一根线没有任何标识,所以当时没接,导致供电不足,后来接上就好了!

   无论如何再次感谢兄台帮我想问题和回复,谢谢!

knightlyj 发表于 2013-10-15 11:09

回复 4# kernel359


    额..恭喜,不过我挺想了解一下详细情况..

kernel359 发表于 2013-10-21 15:16

回复 5# knightlyj


    谢谢!
    其实也没什么详细的情况,就是原来怎么捣鼓都不好使,一直没有相应的中断,后来把那根线接上,一切问题解决。
页: [1]
查看完整版本: gpio复用作中断,但没能显示,采取过一些办法,但问题没解决