C++ library (easyBlack)을 사용하여 GPIO를/dev/mem을 통해 처리합니다.BeagleBone Black이 사용자 공간에서 인터럽트를 얻습니다.
나는 장에서 보았 듯이의 "25.3.3 인터럽트 기능" "AM335x SitaraTM 프로세서 - 기술 참조 설명서"정의 된 이벤트에 따라 호스트 프로세서에 인터럽트 요청을 생성하기 위해
(레벨 또는 GPIO 핀에서 발생하는 GPIO 구성 레지스터는 다음과 같이 프로그래밍되어야합니다 :
• GPIO 채널에 대한 인터럽트는 GPIO_IRQSTATUS_SET_0 및/또는 GPIO_IRQSTATUS_SET_1 레지스터에서 활성화되어야합니다.
• GPIO_LEVELDETECT0, GPIO_LEVELDETECT1, GPIO_RISINGDETECT 및 GPIO_FALLINGDETECT 레지스터에서 인터럽트 요청을 트리거 할 예상 GPIO 이벤트를 선택해야합니다.
괜찮을 때까지 찾을 수있는 모든 문서는 리눅스 커널 헤더 파일 ("linux/gpio.h"및 "linux/interrupt.h")을 사용하여 만들어졌으며 사용 가능한 것으로 보입니다 사용자 공간 프로그램, 모듈에서만. 또는 examples은 커널 드라이버를 사용하고 sysfs의 상태 파일을 감시하여 인터럽트를 구현합니다. 그럴 수도 있지만 느리고 많은 자원이 필요합니다.
원하는 핀의 값을 변경하는 경우 멀티 스레드로 작업하는 것 외에 다른 방법이 있습니까? (이 다른 라이브러리 (github.com/jackmitch/libsoc)는 어떻게합니까?
easyBlack을 커널 모듈로 컴파일 할 수 있습니까?
감사합니다.