gpio 인터럽트 처리 - 제가 뭔가 잘못이해하고 있는걸까요?
글쓴이: chocokeki / 작성시간: 월, 2016/10/31 - 11:33오전
환경 : linux
전원 - LED - 스위치 - gpio
(스위치를 누르면 전원이 LED 타고 gpio로 들어감)
gpio포트 하나를 input 모드로 설정해서 입력값을 받고 싶습니다
1. 드라이버에서 gpio 활성화 및 irq handler 등록
irq_handler_t irq_handler(...) { printk("hello\n"); return IRQ_HANDLED; } gpio_request(123, "test"); gpio_direction_input(123); gpio_export(123, true); gpio_sys_set_active_low(123, 0); //active high request_irq(gpio_to_irq(123), (irq_handler_t) irq_hander, IRQF_TRIGGER_RISING, "irq handler test", NULL);
-> 모두 리턴값 정상, sysfs에 정상적으로 export 확인
2. 테스트#1
watch -n 1 cat /sys/class/gpio/gpio123/value
스위치를 누를 때마다 value가 1로 변하는 것을 확인함
3. 테스트#2
c 프로그램
char data;
fd = open(/sys/class/gpio/gpio123, O_RDONLY);
while(1) read(fd, &data, 1)
스위치를 누르건 안 누르건 무조건 '0'만 읽힘
4. 테스트#3
dmesg로 interrupt handler가 hello 메세지를 출력했는지 확인
없음
5. 테스트#4
/proc/interrupt에 인터럽트 핸들러 등록되어있는지 확인
없음
원래 정상으로 되어야 하는 것 아닌가요?
왜 테스트#1은 되는데 #2, 3, 4는 안될까요??
아무 gpio핀이나 쓰면 안되는걸까요?
Forums:
댓글 달기