This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

omapl138 linux中gpio中断问题

  我采用的操作系统是linux2.6.33.现在想通过gpio0[1]这个管脚产生一个外部中断事件,在首次中查到gpio0[1]对应的中断服务号为42
    我在做驱动时使用 :
   request_irq(42, mcp2515_can1_irq, IRQF_DISABLED|IRQF_TRIGGER_FALLING, DEVICE_NAME, NULL); 
   编译通过,加载驱动时提示参数错误。
 
   我查了下request_irq第一个参数——中断服务号范围为0-31.
   然后我采用AINTC方式,讲GPIO0中断映射到通道4,然后request_irq(4, mcp2515_can1_irq, IRQF_DISABLED|IRQF_TRIGGER_FALLING, DEVICE_NAME, NULL); 
但是这样进入不了中断服务程序,感觉还是不对。
 
    请问下0mapl138平台下,我们在linux系统下怎样做GPIO中断,request_irq中中断服务号该如何确定!
  • linux内核里面有input输入设备的框架的,你只要把要作为输入管教的GPIO挂接到对应的驱动框架上去,然后注册一下就可以了,不需要自己去写的。

  • 1. 请包含#include <linux/interrupt.h>和 <linux/irq.h>
    2. 在申请完毕gpio的时候,需要配置GPIO的引脚为输入引脚,和设定GPIO的引脚中断功能:使用这个函数:比如我用omapl138的GPIO6[1]
    > gpio_direction_output( GPIO_TO_PIN(6, 1), 0 );
    > rq_set_irq_type( gpio_to_irq(GPIO_TO_PIN(6, 1)), IRQF_TRIGGER_LOW );
    注意到没有,gpio_to_irq函数可以将gpio号码转换成为irq号码。
    3. 使用request_irq函数:
    > request_irq( gpio_to_irq(GPIO_TO_PIN(6, 1)) , &中断服务函数地址, 触发信号功能, 名字, (void*)0 );
    就可以了呢。

    可以参考:www.cnblogs.com/.../9217675.html 详解说明哦!