最近有给项目用AM335X,其中有设备用了GPIO3_21作为中断,am335x的SDK环境为linux3.2.0
#define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))
#define IRQ_PIN GPIO_TO_PIN(3,21)
irq = OMAP_GPIO_IRQ(IRQ_PIN); // irq = gpio_to_irq(IRQ_PIN);//
printk("irq number is :%d\n",irq); ///此处打印irq 号为 277// OMAP_GPIO_IRQ /gpio_to_irq 得到的irq号都是277,
但查看技术手册,GPIO3的IRQ为 :62 ,63,通过跟踪内核,发现在 arch/arm/plat-omap/include/plat/gpio.h里面 OMAP_GPIO_IRQ 有相关的代码,按照此操作的确是277,哪里出错了?求大侠解答。
user6051027:
还有一个奇怪的问题就是我调用request_threaded_irq函数的irq,却必须是gpio_to_irq获取的277,这两个irq编号不一样,但却能工作,中断函数也正常,这是为什么?而把request_threaded_irq的中断号改为62,却提示错误:request irq 62 failed,ret = -22 !
yongqing wang:
回复 user6051027:
参考这个帖子:e2echina.ti.com/…/46920
user6051027:
回复 yongqing wang:
不好啥意思,漏了一句代码,是enable_irq的中断号必须是62,不能是gpio_to_irq获取的,但request_threaded_irq函数却必须是gpio_to_irq获取的277号中断,为什么?
user6051027:
不好啥意思,漏了一句代码,是enable_irq和disable_irq函数的中断号必须是62,不能是gpio_to_irq获取的,但request_threaded_irq函数却必须是gpio_to_irq获取的277号中断,为什么?