안녕하세요...

:
: #define GPIO_IRQ_21 21 // GPIO21
:
:
: set_GPIO_IRQ_edge(1 << SA1100_IRQ_TO_GPIO(GPIO_IRQ_21), GPIO_RISING_EDGE);
:
:
: #define IRQ_GPIO_11_27(x) (32 + (x) - 11)
: #define SA1100_GPIO_TO_IRQ(i) (((i) < 11) ? SA1100_IRQ(i) : IRQ_GPIO_11_27(i))
:
:
: >>>>> 그런데 이상한 부분이 있습니다.
: 제가 가지고 있는 kernel2.4.10(falinux로부터 받음)은
:
: 이부분이
: #define IRQ_GPIO_11_27(x) (32 + (x) - 11)
: #define SA1100_GPIO_TO_IRQ(i) (((i) < 11) ? SA1100_IRQ(i) : IRQ_GPIO_11_27(i))
: 다음 처럼 되어 있습니다.
: #define IRQ_GPIO_11_27(x) (11 + (x) - 32)
: #define SA1100_GPIO_TO_IRQ(i) (((i) < 11) ? SA1100_IRQ(i) : IRQ_GPIO_11_27(i))
: 그래서 장형님처럼 수정하였습니다.

==>> 에궁 혹시...

#define GPIO_11_27_IRQ(i) (11 + (i) - 32) 이부분하고 착각하신거아닌가요???

위부분에 보면 따로 #define IRQ_GPIO_11_27(x) (32 + (x) - 11) 이렇게 정의되어 있는데요..

<위치는 : linux-2.4.10-arm/include/asm-arm/arch-sa1100/irqs.h 에 있습니다...>


: 그리고
: set_GPIO_IRQ_edge(1 << SA1100_IRQ_TO_GPIO(GPIO_IRQ_21), GPIO_RISING_EDGE);
: 부분을
: set_GPIO_IRQ_edge(SA1100_IRQ_TO_GPIO(GPIO_IRQ_21), GPIO_RISING_EDGE);
: 수정하였습니다.
:
: 하드 코딩으로 수정도 해보았구요.
: set_GPIO_IRQ_edge(42, GPIO_RISING_EDGE); // 32 + 21 - 11
: set_GPIO_IRQ_edge(0, GPIO_RISING_EDGE); // 11 + 21 - 32
:
: 결과는 모두 같았습니다.
: 무엇이 문제인지...요..

==>>> 수정안하시고...이전의 것을 그대로 사용하시는것이 좋을 듯 싶네요....


: set_GPIO_IRQ_edge() 에서 GPIO_RISING_EDGE, GPIO_FALLING_EDGE는 언제 사용하나요?
: 예)GPIO_FALLING_EDGE는 GPIO_21번이 High->Low일때 IRQ를 동작하게 한다
: (?) 맞는지요?

==>>> 넵...맞습니다.... 그럼...

set_GPIO_IRQ_edge(1 << SA1100_IRQ_TO_GPIO(GPIO_IRQ_21), GPIO_FALLING_EDGE);
enable_irq(IRQ_GPIO21); // allow IRQ

이렇게 한번 해보세요..


그럼... 수고하세요....