Я использую 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 для запуска запроса прерывания должны быть выбраны в регистрах GPIO_LEVELDETECT0, GPIO_LEVELDETECT1, GPIO_RISINGDETECT и GPIO_FALLINGDETECT.
До тех пор пока все в порядке, но вся документация, которую я могу найти, основана на использовании файлов заголовков ядра Linux («linux/gpio.h» и «linux/interrupt.h»), и кажется, что их нельзя использовать для программ пользовательского пространства, только в модулях. Или examples, которые используют драйверы ядра и просматривают файл состояния в sysfs для реализации прерывания. Это может работать, но работает медленно и требует много ресурсов.
Есть ли другая альтернатива, кроме как работать с многопоточным, чтобы увидеть, изменяют ли значения требуемые контакты? (Как эта другая библиотека - github.com/jackmitch/libsoc)
Может быть, скомпилировать easyBlack как модуль ядра?
Спасибо!