我知道了 gpio 口 ,怎么计算这个 io 口对应的中断号 ,例如 gpio(55) 他的中断号是多少??有计算公式吗?
tony2:
一般是建立一个表。bsp里面都搞好了,你用就可以,参考一下别的中断
leo chen:
回复 tony2:
好像没这种对应关系吧,有系统自己完成的
leo chen:
回复 leo chen:
GPIO 引脚号转换为中断号: irq_num = gpio_to_irq(gpio_pin);设置中断出发方式为下降沿触发 irq_set_irq_type(irq_num, IRQF_TRIGGER_FALLING);申请中断: request_irq(irq_num, irq_proc, IRQF_DISABLED, GPIO_DEVICE_NAME, NULL);
kooking:
这个应该对你有帮助:
http://processors.wiki.ti.com/index.php/GPIO_Driver_Guide
Yaoming Qin:
这个您可以查看下technical reference manual中的interrupt和GPI那两章,对于每一个gpiobank来说,中断号是一个,而且是固定的,不是可编程的
Yonghui Lin:
linux/arch/arm/mach-omap2/board-am335xevm.c 文件中有计算公式:
先获得GPIO的pin number:
/* Convert GPIO signal to GPIO pin number */#define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))
然后获得irq中断号:
irq = OMAP_GPIO_IRQ(pin_num)
其中pin_num=GPIO_TO_PIN(bank,gpio),比如GPIO1_7,pin_num=32*1+7=39, irq=160+39=199
leo chen:
回复 Yonghui Lin:
实际操作一下就好了,上面说的还是非常细致的
xiong shaoyi:
你好 我也使用了335x 我使用gpio_to_irq这个函数获取中断号,但是gpio_to_irq在内核里面很多,请问到底是哪个?
有pin_num=GPIO_TO_PIN(bank,gpio) = bank*32+gpio+32
pin_num=GPIO_TO_PIN(bank,gpio) = bank*32+gpio+160
pin_num=GPIO_TO_PIN(bank,gpio) = bank*32+gpio+96
到底哪个正确呢?谢谢
hongzheng liu:
回复 Yaoming Qin:
我想在中断中 给我的应用程序发送数据,让我的应用程序立即响应中断,不知道有没有什么好的建议?
jiew:
回复 hongzheng liu:
你可以透過在中斷中發送訊號通知應用程序,但應該沒辦法立即響應..
中斷發送訊號後,之後回到User Space 還須經過調度演算法,等調度到你的應用程序執行時可能已經經過了30u~40us了