Содержание
Пример gpio_interrupt
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность прерываний для GPIO пинов. Общее количество пинов на плате задается макросом GPIO_PIN_NUM
. В битовой маске pinsBitmap
пины из массива ExceptionPinArr
помечаются отработавшими, чтобы в дальнейшем пример мог корректно завершиться. Все пины, кроме указанных в массиве ExceptionPinArr
, переводятся в состояние PINS_MODE
. Для всех пинов, кроме указанных в массиве ExceptionPinArr
, будет зарегистрирована функция обработки прерывания.
В бесконечном цикле происходит проверка условия равенства битовой маски pinsBitmap
битовой маске окончания работы примера DONE_BITMASK
(соответствует условию, когда прерывание произошло на каждом GPIO пине). Далее в этом цикле вызывается функция обработчик прерывания. Если прерывание происходит впервые на пине, который не указан в массиве ExceptionPinArr
, функция обработки прерывания получает это событие с помощью функции GpioGetEvent
. Соответствующий пин в битовой маске pinsBitmap
помечается отработавшим. Обнаружение прерываний на этом пине отключается вызовом функции GpioReleaseMode
.
Следует учитывать возможное влияние начального состояния регистров подтягивающих резисторов для каждого пина на работу примера.
На некоторых пинах GPIO могут также присутствовать внешние подтягивающие резисторы (например, в ревизиях 1.4, 1.5 платформы Raspberry Pi 4 B они есть на пинах GPIO2 и GPIO3). При наличии таких резисторов, более слабые внутренние резисторы не позволят притянуть такие пины к 0.
Прерывания для событий GPIO_EVENT_LOW_LEVEL
и GPIO_EVENT_HIGH_LEVEL
не поддерживаются.
ExceptionPinArr
– массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на аппаратных платформах Raspberry Pi 4 или Radxa ROCK 3a ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В начало