omap gpio irq

本文介绍了如何将OMAP平台的GPIO口配置为外部中断输入,包括设置GPIO模式、申请IO口、确认输入方向和申请中断。重点强调了上拉配置对于中断稳定性的重要性,并提及了GPIO口的复用情况及其处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要让IO口作为从外部出发的中断口,可以分为以下几步

①先让其为gpio模式,并且为方向设置为输出,并且必须上拉

1,可以在平台上添加

OMAP4_MUX(SDMMC1_DAT4, OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP), 

          SDMMC1_DAT1 这个名字为原理图端口上指定端口的第一个名字

          INPUT_PULLUP的含义就不用说了~~

          OMAP_MUX_MODE3  指定为gpio模式

2,也可以在驱动里边用这个函数直接定义

omap_mux_init_gpio(106,OMAP_PIN_INPUT_PULLUP);

//这个函数的好处是不用指定gpio模式

106是io的序号,跟上边平台中的SDMMC1_DAT4等价

②申请io口


        error = gpio_request(IRQ_GPIO_UP, NULL);
        if (error < 0) {
                printk("oled Failed to request GPIO %d, error %d\n",
                        IRQ_GPIO_UP, error);
                return error;
        }
③:这部有没有必要我没测试过,估计作用是再次确认为输入口,我是参考gpio_key相关代码是这么写的        

error = gpio_direction_input(IRQ_GPIO_UP);
        if (error < 0) {
                printk("oled :Failed to configure direction for GPIO %d, error %d\n",
                        IRQ_GPIO_UP, error);
                return error;
        }

             irqflags |= IRQF_SHARED;   //其他的io口可以共享,所以就可以被其他的中断来disable掉

④:申请中断   (其实等价于request_irq函数)
        error = request_any_context_irq(gpio_to_irq(IRQ_GPIO_UP),light_up ,IRQF_TRIGGER_FALLING,"OLED_GPIO_106",NULL);
        if (error < 0) {
                printk( "oled :Unable to claim irq %d; error %d\n",
                        IRQ_GPIO_UP, error);
                return error;
        }



我测试时遇到的问题是:只是指定为了OMAP_PIN_INPUT而没有指定为OMAP_PIN_INPUT_PULLUP

打印寄存器的时候一直发现GPIO_DATAIN跟成功的不一样  才知道要设定为pullup才能稳定中断,否则自己的gpio口电平悬空未知~~


关于omap4 GPIO中断还有复用的情况

比如:gpio_3跟gpio_wk3就复用一个引脚request_irq(GPIO_TO_ITQ(3),)对应于两个引脚

如果你是用gpio_wk3引脚产生中断的话就应该将gpio_3设置为其他模式   代码如下:/arch/arm/mach-omap2/board-omap4panda.c中添加

        OMAP4_MUX(SIM_CD, OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP),
        OMAP4_MUX(KPD_ROW1, OMAP_MUX_MODE7 | OMAP_PIN_INPUT_PULLUP),

        omap_mux_init_signal("kpd_row2.gpio_3", OMAP_MUX_MODE7 | OMAP_PIN_INPUT_PULLUP);  /* gpio_3 */
        omap_mux_init_signal("sim_cd.gpio_wk3", OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP | OMAP_WAKEUP_EN ); /* gpio_wk3 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值