引脚定义:
{"gmii1_txd2.gpio0_17",OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}
并调用setup_pin_mux进行注册
申请GPIO:
char aTemp[10] = {0};
gpioNum = 17;
sprintf(aTemp, "zitgpio%d", gpioNum);
gpio_request(gpioNum, aTemp);
gpio_direction_input(gpioNum);
gpio_export(gpioNum, 1);
中断申请:
irq_num = gpio_to_irq(gpioNum);
static int noused;
request_irq(irq_num, drv_fpga_isr, IRQF_SHARED|IRQF_TRIGGER_FALLING, "Fpga_Int", &noused);
irq_set_irq_type(irq_num, IRQF_SHARED|IRQF_TRIGGER_FALLING);
上述配置均执行成功,且GPIO各寄存器数值如下:
GPIO_SYSCONFIG = 0x0000001d
GPIO_IRQSTATUS_SET_0 = 0x00020000
GPIO_IRQSTATUS_SET_1 = 0x00000000
GPIO_LEVELDETECT0 = 0x00000000
GPIO_LEVELDETECT1 = 0x00000000
GPIO_RISINGDETECT = 0x00000000
GPIO_FALLINGDETECT = 0x00020000
GPIO_IRQWAKEN_0 = 0x00020000
GPIO_IRQWAKEN_1 = 0x00000000
GPIO_IRQSTATUS_RAW_0 = 0x00000000
GPIO_IRQSTATUS_RAW_1 = 0x00000000
GPIO_IRQSTATUS_CLR_0 = 0x00020000
GPIO_IRQSTATUS_CLR_1 = 0x00000000
GPIO_OE = 0xffffffff
GPIO_DATAIN = 0x00080000
GPIO_DATAUOT = 0x00000000
GPIO_CLEARDATAOUT = 0x00000000
GPIO_SETDATAOUT = 0x00000000
查看cat /proc/interrupts 信息如下:
CPU0
4: 0 INTC omap2_elm
12: 78 INTC edma
14: 0 INTC edma_error
16: 0 INTC tsc, tiadc
30: 0 INTC omap_i2c
36: 45262 INTC da8xx_lcdc
40: 0 INTC cpsw
43: 0 INTC cpsw
64: 184 INTC mmc0
68: 77296 INTC gp timer
70: 1019 INTC omap_i2c
71: 0 INTC omap_i2c
72: 2623 INTC OMAP UART0
77: 0 INTC wkup_m3
78: 1 INTC wkup_m3_txev
93: 0 INTC cpsw
94: 0 INTC cpsw
109: 84 INTC omap4-sham
166: 0 GPIO mmc0
177: 0 GPIO Fpga_Int
Err: 0
问题:
外部对GPIO0_17引脚输入低电平时,GPIO0_17引脚仍为高电平,且不会触发中断处理函数drv_fpga_isr的执行,不知道问题出在哪里,多谢!