TI的omap3530如何实现GPIO口的中断.

来源:互联网 发布:csgo正在检索游戏数据 编辑:程序博客网 时间:2024/05/16 15:44

最近在做omap3530如何实现GPIO的中断.特此记录一下调试过程.

驱动肯定是标准的做法.重点说一下如何配置GPIO口.GPIO口有6组,而复用管脚的GPIO模式用的是模式4才是GPIO.

一,首先把GPIO口的管脚配置为GPIO模式

想在自己的驱动中配置mux管脚,只有一个办法ioremap.不用考虑调用内核的接口omap_mux_init_gpio,因为这是在目录arch\arm\plat-omap2下,这个目录下的东西,基本上平台的配置,在内核跑起来之后,会把平台配置完,进入文件系统后,会把一些结构体释放掉.

  因此要想在自己的驱动中实现mux配置,只能用ioremap.如果可以在内核中配置,那么就方便多了.

  omap3530的内核用的mux.c不是arch\arm\plat-omap下的.而是arch\arm\mach-omap2下的.

关于这一点,我也没有搞明白.TI的东西真乱.有明白人,可以在这个文章的评论中留言,到时候加我QQ.共同学习交流.

  在这里面

ret = gpio_get_value(10);printk(KERN_ERR "\n**GPIO10**:%d\n",ret);omap_mux_init_gpio(10, OMAP_PIN_INPUT_PULLUP);if (gpio_request(10, "INT_GPIO_10") < 0) {printk(KERN_ERR "Failed to request GPIO10for INT_GPIO_10\n");}gpio_direction_input(10);
这样即可.

  二,驱动中如何操作

在配置完成后,即可在驱动中使用.

disable_irq(gpio_to_irq(OMAP3530_INT_GPIO));/*gpio direction config for input*/gpio_direction_input(OMAP3530_INT_GPIO);/*config irq to falling trigger*/set_irq_type(OMAP_GPIO_IRQ(OMAP3530_INT_GPIO), IRQ_TYPE_EDGE_FALLING);/*enable gpio irq*/enable_irq(gpio_to_irq(OMAP3530_INT_GPIO));/*when init module, reuqest irq. Do not in open dev, becase /proc*/result = request_irq(OMAP_GPIO_IRQ(OMAP3530_INT_GPIO),interrupt_handle,IRQF_DISABLED,"card_detect",NULL);if(result){printk(KERN_INFO "short: can't get assigned irq %i\n", OMAP_GPIO_IRQ(OMAP3530_INT_GPIO));}

这样即可在中断看看效果如何?


作者:张亮校

日期:2012.10.16