335x按键中断驱动

来源:互联网 发布:大仲马小仲马知乎 编辑:程序博客网 时间:2024/05/21 20:25

拿到一个新板子玩了段时间,既然点灯大法OK了,那试试按键中断大法咯。

大体上和2440的驱动一致,不过有细微差别:

2440的注册中断函数
request_irq(IRQ_EINT4, buttons_irq, IRQT_BOTHEDGE, "LGF-S2", 99);

335x的注册中断函数
request_irq(gpio_to_irq(32+12),buttons_irq,  IRQ_TYPE_LEVEL_LOW,"LGF-S2",99);//注册中断函数GPIO1_12
为什么会导致这样的区别呢,查看内核irqs-33xx.h(来自于TRM Table 6-1. ARM Cortex-A8 Interrupts)中有中断向量,但是发现关于GPIO的中断向量非常少。
猜测:由于335x资源丰富,管脚复用模式很多(0-7),它将模式7的GPIO中断向量单独列出去,所以在注册GPIO中断时需要转化(gpio_to_irq)。
 至于gpio_to_irq()下次在做具体分析。
测试:中断被调用了313次。
/root/key_interrupt # cat /proc/interrupts            CPU0         4:          0      INTC  omap2_elm 12:        162      INTC  edma 14:          0      INTC  edma_error 16:          0      INTC  tsc, tiadc 17:          0      INTC  cppi41_dma 18:          0      INTC  musb-hdrc.0 19:          1      INTC  musb-hdrc.1 36:      41122      INTC  da8xx_lcdc 40:          0      INTC  cpsw 43:          0      INTC  cpsw 64:        538      INTC  mmc0 68:       6552      INTC  gp timer 70:         31      INTC  omap_i2c 72:        680      INTC  OMAP UART0 75:          0      INTC  rtc0 76:          0      INTC  rtc0 77:          0      INTC  wkup_m3 78:          1      INTC  wkup_m3_txev 93:          0      INTC  cpsw 94:          0      INTC  cpsw109:         84      INTC  omap4-sham166:          0      GPIO  mmc0208:        313      GPIO  LGF-S2Err:          0
                                             
0 0
原创粉丝点击