Проблемы с реализацией драйверов контроллера GPIO
Расширение платформы GPIO (GpioClx) предоставляет гибкий интерфейс драйвера устройства (DDI). Этот DDI позволяет разработчикам выбирать альтернативные интерфейсы обратного вызова. Разработчик драйвера должен реализовать набор функций обратного вызова событий, которые лучше всего подходят для аппаратной архитектуры целевого устройства контроллера GPIO.
Например, если драйвер контроллера GPIO поддерживает чтение и запись в контакты ввода-вывода GPIO, разработчик может реализовать одну из следующих пар функций обратного вызова:
CLIENT_ReadGpioPins и CLIENT_WriteGpioPinsCLIENT_ReadGpioPinsUsingMask и CLIENT_WriteGpioPinsUsingMask Функции CLIENT_ReadGpioPins и CLIENT_WriteGpioPins получают номер банка, массив номеров контактов GPIO и буфер данных для битовых значений, считываемых из этих контактов или записываемых в них. Если в операции чтения или записи обычно осуществляется доступ только к небольшому количеству контактов GPIO, эта пара обратных вызовов может создать оптимальную реализацию. Эта реализация обычно используется для контроллеров GPIO, аппаратные регистры которых не сопоставлены в памяти. Однако если во время операции чтения или записи будет доступно несколько контактов GPIO или оборудование контроллера GPIO может эффективно получать доступ к нескольким контактам GPIO в параллельном режиме, другая пара функций обратного вызова может обеспечить лучшую реализацию.
Функции обратного вызова CLIENT_ReadGpioPinsUsingMask и CLIENT_WriteGpioPinsUsingMask могут считывать или записывать до 64 контактов в одном вызове. Функция CLIENT_ReadGpioPinsUsingMask считывает значения закрепления GPIO в 64-разрядную маску. Функция CLIENT_WriteGpioPinsUsingMask использует две 64-разрядные маски. Одна маска указывает, какие контакты GPIO следует задать, а другая маска указывает, какие контакты GPIO следует очистить. Эта реализация обычно используется для контроллеров GPIO, сопоставленных с памятью.