0

我正在尝试在我的驱动程序中为 DM6446 GPIO BANK 0 中断设置一个中断处理程序。但是 request_irq 返回 -22。我从数据表中知道 GPIO BANK-0 的中断号,它声明它是 56。以下是我的代码中 GPIO 的设置。我想在 GPIO-10 上获得中断。

while((REG_VAL(PTSTAT) & 0x1) != 0);            // Wait for power state transtion to finish     
REG_VAL(MDCTL26) =  0x00000203;                  //To enable GPIO module and EMURSITE BIT as stated in sprue14 for state transition
REG_VAL(PTCMD) = 0x1;           // Start power state transition for ALWAYSON
while((REG_VAL(PTSTAT) & 0x1) != 0);            // Wait for power state transtion to finish 
REG_VAL(PINMUX0) = REG_VAL(PINMUX0) &  0x80000000;             //Disbale other Functionlaity on BANK 0 pins 
printk(KERN_DEBUG "I2C: PINMUX0 = %x\n",REG_VAL(PINMUX0));

REG_VAL(DIR01)   =  REG_VAL(DIR01) | 0xFFFFFFFF;              //Set direction as input for GPIO 0 and 10
REG_VAL(BINTEN)  =  REG_VAL(BINTEN) | 0x00000001;             //Enable Interrupt for GPIO Bank 0
REG_VAL(SET_RIS_TRIG01)   =  REG_VAL(SET_RIS_TRIG01) | 0x00000401; // Enable rising edge interrupt of GPIO BANK 0  PIN 0 PIN 10
REG_VAL(CLR_FAL_TRIG01)   =  REG_VAL(CLR_FAL_TRIG01) | 0x00000401; // Disable falling edge interrupt of Bank 0
 Result = request_irq(56,Gpio_Interrupt_Handler,0,"gpio",I2C_MAJOR);
if(Result < 0)
{
    printk(KERN_ALERT "UNABLE TO REQUEST GPIO IRQ %d ",Result);
}

一点帮助将不胜感激。谢谢你。

我已经为 BANK-0 的 PIN-10 尝试了 gpio_to_irq,但它返回的 irq no 为 72,但 DM6446 的中断号仅在数据表中高达 63。

4

1 回答 1

0

我知道了。如果我使用gpio_to_irq,它将返回一个有效的 IRQ 号,但与处理器数据表中指定的中断号(我猜也称为 IRQ 号)不同。如果我看到/proc/interrupts,它将有一个条目该 IRQ 从gpio_to_irq返回,但在 GPIO 类型下不是处理器的中断控制器,在我的情况下,对于 ARM,它应该是 AINTC。所有其他中断都是 AINTC 类型。此外,即使request_irq以数据表中规定的中断号成功,/proc/stat也会报告两个 IRQ 号的中断,即 AINTC 和 GPIO 类型。

于 2016-10-12T20:34:48.393 回答