This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x的GPIO中断产生到中断函数调用的时间消耗



 我们现在遇到一个问题,我们申请了 GPIO_0_14下降沿中断,但是进中断函数后,我们获取IO的状态并打印的时候,发现值为1,下降沿中断本应该为零才对,我们给GPIO_0_14低电平时间约为50us,我们想知道GPIO中断产生到进入中断函数,时间消耗是多少

以下为部分代码

ret = request_irq(gpio_to_irq(GPIO_TO_PIN(0,14)), PS2_exint_isr, IRQ_TYPE_EDGE_FALLING, DEVICE_NAME, NULL);

;;;;

static irqreturn_t  PS2_exint_isr(int irq,void *dev_id)

{

            int a = AM335X_GPIO_GET_PIN(PS2_CLK);

            printk("a=%d\n",a);

  

         return IRQ_HANDLED;

}

我们得到的打印值都是a=1

 

下面是驱动初始化时打印的部分寄存器。

 

[  231.388556] GPIO_VERSON Register=50600801

[  231.392784] GPIO_DEBOUNCENABLE Register=0

[  231.404147] GPIO_DEBOUNCTIME Register=0

[  231.408262] GPIO_fall Register=0

[  231.411641] GPIO_irqset0 Register=0

[  231.415280] GPIO_irqset1 Register=0

[  231.419818] IRQ 174 has been attached to s3c2410 PS/2 !

[  231.425286] GPIO_DEBOUNCENABLE Register=0

[  231.437170] GPIO_DEBOUNCTIME Register=0

[  231.441194] GPIO_fall Register=4000

[  231.444832] GPIO_irqset0 Register=4000

[  231.448782] GPIO_irqset1 Register=0

  • 目前测到的是GPIO0的所有IO中断都要几ms的消耗,,但是GPIO1~3都不需要,

    估计跟GPIO0 wakeup 有关系

    谁知道怎么关闭GPIO0的wake up 吗?

    我用的是linux-3.2-psp04.06.00.07.sdk

  • 这个问题,我也会继续看看

  • ti网站新版的内核以及修改了这点,,可以下新的

    修改arch/arm/mach-omap2/irq.c

    static inline void omap_intc_handle_irq(void __iomem *base_addr, struct pt_regs *regs)

    {

             u32 irqnr;

     

             do {

                      irqnr = readl_relaxed(base_addr + 0x98);

                      if (irqnr)

                                goto out;

     

                      irqnr = readl_relaxed(base_addr + 0xb8);

                      if (irqnr)

                                goto out;

     

                      irqnr = readl_relaxed(base_addr + 0xd8);

    //#ifdef CONFIG_SOC_OMAPTI816X -----335x有128/32=4个寄存器

    #ifdef CONFIG_ARCH_OMAP3

                      if (irqnr)

                                goto out;

                      irqnr = readl_relaxed(base_addr + 0xf8);

    #endif