Использование GPIO в высокоуровневых приложениях
Внимание
Это документация по Azure Sphere (устаревшая версия). Служба Azure Sphere (устаревшая версия) выходит на пенсию 27 сентября 2027 г., и к этому времени пользователи должны перейти в Azure Sphere (интегрированная). Используйте селектор версий, расположенный над toC, чтобы просмотреть документацию по Azure Sphere (интегрированная).
Azure Sphere поддерживает GPIO (операции ввода-вывода общего назначения). GPIO — это разновидность программируемого цифрового контакта на интегральной микросхеме. В GPIO нет предопределенных функций — их поведение настраивается приложениями. Наиболее часто GPIO используются для изменения состояния аппаратных устройств, управления светодиодными индикаторами и считывания состояния переключателей.
Примечание.
В этом разделе описано, как использовать GPIO в высокоуровневом приложении. См. подробнее о применении GPIO в RTApp в руководстве по использованию периферийных устройств в приложении с поддержкой режима реального времени.
Высокоуровневые приложения Azure Sphere могут обмениваться данными с GPIO путем вызова Applibs API GPIO. Пример GPIO_HighLevelApp демонстрирует обмен данными с GPIO на устройстве MT3620.
Для GPIO поддерживаются следующие операции:
- чтение входных данных;
- установка высокого или низкого уровня выхода;
- опрос состояния (программные прерывания).
Требования к GPIO
Для приложений, которые обмениваются данными с GPIO, должны быть предоставлены правильные файлы заголовка для GPIO, а в манифест приложения нужно добавить параметры GPIO.
Все приложения должны установить свое целевое оборудование и содержать соответствующий файл заголовка определения оборудования.
Файлы заголовков
#include <applibs/gpio.h>
#include "path-to-your-target-hardware.h"
Замените "path-to-your-target-hardware.h" на путь к файлу заголовка для оборудования.
Параметры в манифесте приложения
Параметры GPIO в манифесте приложения описывают все GPIO, к которым будет обращаться приложение. Только одно приложение может использовать GPIO в один момент времени. Чтобы настроить эти параметры, добавьте возможность Gpio
в манифест приложения, а затем добавьте в нее каждый экземпляр GPIO. Манифест приложения Azure Sphere содержит дополнительные сведения.
В своем коде используйте константы, определенные для вашего оборудования, чтобы идентифицировать GPIO. При сборке приложения компилятор преобразует эти значения в необработанные значения.
Например, вот отрывок из манифеста приложения, который предназначен для эталонной макетной платы (RDB) MT3620, и получающий три его GPIO (1, 8, и 12):
"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Следующий отрывок показывает, как задать те же самые GPIO в приложении, ориентированном на Начальный набор Avnet MT3620:
"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]
Открытие GPIO в качестве входа
Если вам нужно считывать данные из экземпляра GPIO без записи в него, его можно открыть в качестве входа. Вызовите GPIO_OpenAsInput, чтобы открыть экземпляр GPIO и настроить его в качестве входа. Эта команда получает дескриптор файла для операций с GPIO. Вы можете считывать данные из экземпляра GPIO, настроенного в качестве входа, но не записывать в него. Если экземпляр GPIO настроен в качестве входа, его нужно закрыть, прежде чем использовать в качестве выхода.
Открытие GPIO в качестве выхода
Если вам нужно записывать данные в экземпляр GPIO, его нужно открыть в качестве выхода. Вызовите GPIO_OpenAsOutput, чтобы открыть экземпляр GPIO и настроить его в качестве выхода. Будет получен дескриптор файла для операций с GPIO, а также установлен режим выхода и исходное значение. Если экземпляр GPIO настроен в качестве выхода, вы сможете записывать в него данные и считывать их из него. Если экземпляр GPIO настроен в качестве выхода, его нужно закрыть, прежде чем использовать в качестве входа.
Опрос GPIO
Когда экземпляр GPIO открыт, в нем можно отслеживать разные события, например нажатия кнопок. Для этого следует настроить таймер опроса GPIO. Аппаратные прерывания не поддерживаются для GPIO в Azure Sphere, поэтому необходимо использовать опрос. Опрос GPIO демонстрируется в примере GPIO.
Считывание из GPIO
Чтобы прочитать данные из GPIO, вызовите GPIO_GetValue.
Запись в GPIO
Чтобы записать данные в GPIO, вызовите GPIO_GetValue.
Настройка силы диска GPIO
Сила диска пин-кода GPIO относится к объему текущего используемого для его диска. Как правило, этот объем текущего значения имеет значение по умолчанию. Однако в некоторых сценариях, таких как более яркие индикаторы или повышенная мощность датчиков, требуется настройка силы диска на определенные пин-коды GPIO.
Чтобы задать силу диска, сначала используйте структуру gpiopin_request , чтобы указать конфигурацию силы диска для одного или нескольких закреплений GPIO. Затем передайте gpiopin_request
и GPIO_SET_PIN_CONFIG_IOCTL в вызове IOCTL.
В следующем фрагменте кода показано, как задать силу диска двух закреплений GPIO, указанных в lineoffsets
массиве gpiopin_request
структуры.
//get chip file descriptor
int chipfd = __z_azsp_open("/dev/gpiochip0", O_CLOEXEC);
//set drive strength for the requested pins
struct gpiopin_request pinreq;
memset(&pinreq, 0, sizeof(pinreq));
pinreq.linecount = 2;
pinreq.lineoffsets[0] = SAMPLE_RGBLED_BLUE;
pinreq.lineoffsets[1] = SAMPLE_RGBLED_RED;
pinreq.config_type = PIN_CONFIG_DRIVE_STRENGTH;
pinreq.config_arg = 16;
result = ioctl(chipfd, GPIO_SET_PIN_CONFIG_IOCTL, &pinreq);
if (result < 0) {
close(chipfd);
return -1;
}
//do other work like setting pins as output
struct gpiohandle_request request;
memset(&request, 0, sizeof(request));
request.flags = GPIOHANDLE_REQUEST_OUTPUT;
request.lines = 2;
request.lineoffsets[0] = SAMPLE_RGBLED_BLUE;
request.lineoffsets[1] = SAMPLE_RGBLED_RED;
request.default_values[0] = 1;
request.default_values[1] = 1;
result = ioctl(chipfd, GPIO_GET_LINEHANDLE_IOCTL, &request);
if (result < 0) {
close(chipfd);
return -1;
}
Закрытие GPIO
Чтобы закрыть GPIO, вызовите функцию POSIX close().
Поддержка MT3620
Поддерживаемые функции GPIO для микросхемы MT3620 перечислены в описании состояния поддержки MT3620. Руководство пользователя для разработки платы MT3620 описывает расположение и функции контактов для MT3620 RDB.
Папка HardwareDefinitions в каталоге установки пакета SDK Microsoft Azure Sphere содержит определения общих досок разработки Azure Sphere, модулей и микросхем. Он содержит файлы заголовков и JSON, определяющие главные интерфейсы для MT3620, MT3620 RDB, а также другого оборудования MT3620. Расположение по умолчанию для папки HardwareDefinitions находится C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
в Windows и /opt/azurespheresdk/HardwareDefinitions
Linux.
Репозиторий примеров Azure Sphere на GitHub содержит файлы заголовков и JSON, определяющие главные интерфейсы SPI для микросхем MT3620 и RDB MT3620, а также другое оборудование MT3620.-->