KasperskyOS Community Edition 1.3

Пример 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 ошибка не возникает.

Файлы примера

Код примера и скрипты для сборки находятся по следующему пути:

/opt/KasperskyOS-Community-Edition-<version>/examples/gpio_interrupt

Сборка и запуск примера

См. "Сборка и запуск примеров".