안녕하세요...

irq 관련 내용은 include/asm/arch/irqs.h의 헤더파일을 분석해 보세요..

: enable-irq(20) unbalance 이상한 주소 cfxxxxxx 가 뜨더라구요

==>> 저두 정확한 원인을 모르겠습니다. enable_irq() 사용시 발생합니다.

따라서 disable_irq()를 해주시고 나서 enable_irq()를 사용해 보세요.


: set_GPIO_IRQ_edge 는 어떤 함수인지 궁금합니다..

==>> 이것은 GPIO_IRQ를 GPIO_RISING_EDGE 또는 GPIO_FALLING_EDGE 로 설정하는 함수입니다.

이 함수의 설정에 따라 GPIO_IRQ의 인터럽트가 RISING_EDGE에서 동작할지 FALLING_EDGE에서

동작할지를 결정하게 됩니다.


include/asm/arch/hardware.h 파일에 다음과 같이 정의 되어 있습니다.

/*
* GPIO edge detection for IRQs:
* IRQs are generated on Falling-Edge, Rising-Edge, or both.
* This must be called *before* the corresponding IRQ is registered.
* Use this instead of directly setting GRER/GFER.
*/
#define GPIO_FALLING_EDGE 1
#define GPIO_RISING_EDGE 2
#define GPIO_BOTH_EDGES 3
extern void set_GPIO_IRQ_edge( int gpio_nr, int edge_mask );


:
: 그리고 매크로 IRQ_GPIO와 IRQ_TO_GPIO 도요..
:

==>> IRQ_GPIO는 GPIO 값을 IRQ 값으로 변환하는것이고,

IRQ_TO_GPIO는 IRQ값을 GPIO값으로 변환하는메크로 입니다.

include/asm/arch/irqs.h의 헤더파일을 분석해 보세요..


그럼 수고하세요..