안녕하세요...

제가 이 문제로 며칠째 고생을 하고 있는데도 도저히 안되서 이렇게 글을 남깁니다...

EZ-X5보드에서 GPIO로 인터럽트를 사용하려고 하는데요 설정은 아래와 같습니다.


void gpio_init(void)

{

GPDR0 &= ~(1 << 0);

GAFR0_L |= (1 << 0);


GFER0 |= (1 << 0);

GRER0 |= (1 << 0);

}


irqreturn_t gpio_interrupt(int irq, void *data)

{

printk("gpio interrupt test\n");

return IRQ_HANDLED;

}


int gpio_init_module(void)

{

int rst;

gpio_init();


set_irq_type(IRQ_GPIO(0), IRQT_RISING);

if (request_irq(IRQ_GPIO(0), gpio_interrupt, 0, "GPIO_0", NULL)) {

printk("unable to get IRQ 0\n");

return -EBUSY;

}


rst = register_chrdev(253, "GPIO_0", &int_fops);

if (rst < 0) {

printk("GPIO0 : Can't get Major Number 6\n");

return rst;

}

return 0;

}


제가 GPIO 0번을 인터럽트로 사용하려고 관련 레지스터도 수정을 하였습니다.


GPDR에서 0번을 0으로 해서 입력으로 설정하고

GAFR은 GPIO0은 별다른 설정을 해주지 않아도 된다고 해서 기본값만 넣었구요

GFER과 GRER은 혹시나해서 RISING, FALLING EDGE 모두 받도록 해놨습니다.


그리고 게시판을 찾아보니 set_GPIO_IRQ_edge를 사용하라는 말이 많던데

알아보니 커널 2.6에서 set_irq_type으로 바꼈다고 하더군요, 그래서 set_GPIO_IRQ_edge대신 set_irq_type을 사용했구요


이렇게 설정을하고 보드에 모듈을 등록하고

3.3v에서 선을 따와서 보드 U1의 65번에 입력을 해도 인터럽트가 발생하지 않더군요ㅠ 왜 그럴까요ㅠ_ㅠ??

좋은 하루 되세요...