Używanie obiektów GPIO w aplikacjach wysokiego poziomu
Usługa Azure Sphere obsługuje obiekty GPIO (dane wejściowe/wyjściowe ogólnego przeznaczenia). GPIO to rodzaj programowalnej cyfrowej pinezki w obwodzie zintegrowanym. Obiekty GPIO nie mają wstępnie zdefiniowanych funkcji, a ich zachowanie może zostać dostosowane przez aplikację. Niektóre typowe zastosowania dla obiektów GPIO to zmiana stanu urządzeń sprzętowych, sterowanie diodami LED i odczytywanie stanu przełączników.
Uwaga
W tym temacie opisano, jak używać obiektów GPIO w aplikacji wysokiego poziomu. Zobacz Używanie urządzeń peryferyjnych w aplikacji z obsługą czasu rzeczywistego, aby uzyskać informacje na temat używania obiektów GPIO w aplikacjach RTApps.
Aplikacje usługi Azure Sphere na wysokim poziomie mogą komunikować się z obiektami GPIO, wywołując interfejsy API gpio aplikacji. W przykładzie GPIO_HighLevelApp pokazano, jak komunikować się z obiektami GPIO na urządzeniu MT3620.
Następujące operacje są obsługiwane dla obiektu GPIO:
- Odczytywanie danych wejściowych
- Ustaw wysoką lub niską wartość wyjściową
- Przerwania w sondażach/oprogramowaniu
Wymagania dotyczące obiektu GPIO
Aplikacje komunikują się z obiektami GPIO muszą zawierać odpowiednie pliki nagłówków dla obiektu GPIO i dodać ustawienia obiektu GPIO do manifestu aplikacji.
Wszystkie aplikacje muszą ustawić sprzęt docelowy i zawierać odpowiedni plik nagłówka definicji sprzętu.
Pliki nagłówków
#include <applibs/gpio.h>
#include "path-to-your-target-hardware.h"
Zastąp ścieżkę "path-to-your-target-hardware.h" ścieżką do pliku nagłówka sprzętu.
Ustawienia manifestu aplikacji
Ustawienia gpio w manifest aplikacji lista gpio, które są dostępne przez aplikację. Tylko jedna aplikacja może jednocześnie używać obiektu GPIO. Aby skonfigurować te ustawienia, dodaj Gpio
możliwość do manifestu aplikacji, a następnie dodaj każdy obiekt zasad grupy do tej funkcji.
Manifest aplikacji Azure Sphere zawiera więcej szczegółów.
W kodzie do identyfikowania obiektów GPIO użyj stałych zdefiniowanych dla sprzętu. Kompilator przetłumaczy te wartości na wartości raw podczas tworzenia aplikacji.
Na przykład oto fragment manifestu aplikacji dla aplikacji, która jest skierowana do tablicy rozwoju odwołania MT3620 (RDB) i uzyskuje trzy z jego GPIO (1, 8 i 12):
"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Poniższy fragment przedstawia sposób określania tych samych obiektów GPIO w aplikacji docelowej zestawu startowego Avnet MT3620:
"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]
Otwieranie obiektu GPIO jako danych wejściowych
Jeśli chcesz odczytać dane z obiektu zasad grupy, ale nie chcesz do niego pisać, możesz otworzyć go jako dane wejściowe. Wywołaj GPIO_OpenAsInput , aby otworzyć obiekt GPIO i ustawić go jako wejściowy. Spowoduje to pobranie deskryptora pliku dla operacji na gpio. Można czytać z obiektu GPIO, gdy jest on ustawiony na dane wejściowe, ale nie można do niego pisać. Jeśli obiekt gpio jest ustawiony na dane wejściowe, należy go zamknąć , aby można było ustawić dane wyjściowe.
Otwórz obiekt GPIO jako dane wyjściowe
Jeśli chcesz napisać do obiektu zasad grupy, musisz otworzyć go jako dane wyjściowe. Wywołaj GPIO_OpenAsOutput , aby otworzyć obiekt GPIO i ustawić go na wartość wyjściową. Spowoduje to pobranie deskryptora pliku dla operacji na gpio, ustawić tryb wyjściowy i wartość początkową. Gdy obiekt zasad grupy jest ustawiony na wartość wyjściową, można napisać do niego i odczytać z niego. Jeśli obiekt gpio jest ustawiony na wartość wyjściową, należy go zamknąć , aby można było ustawić dane wejściowe.
Ankieta dla obiektu zasad grupy
Gdy obiekt zasad grupy jest otwarty, możesz monitorować go pod kątem zdarzeń, takich jak naciśnięcie przycisku. W tym celu należy skonfigurować czasomierz do ankiety obiektu zasad grupy. Przerwania sprzętowe dla obiektów GPIO nie są obsługiwane w usłudze Azure Sphere, więc należy użyć ankiet. W przykładzie obiektu GPIO przedstawiono sposób ankiety obiektu ZASAD GRUPY.
Odczytywanie z obiektu GPIO
Aby odczytać dane z obiektu zasad grupy, zadzwoń do GPIO_GetValue.
Pisanie do obiektu zasad grupy
Aby napisać do obiektu zasad grupy, zadzwoń do GPIO_SetValue.
Ustawianie siły dysku obiektu GPIO
Siła dysku numeru PIN gpio odnosi się do ilości prądu używanego do jego napędzania. Zazwyczaj wartość bieżąca jest ustawiana jako wartość domyślna. Jednak niektóre scenariusze, takie jak jaśniejsze diody LED lub zwiększona moc czujników, wymagają dostosowania siły dysku do niektórych styki GPIO.
Aby ustawić siłę dysku, najpierw użyj struktury gpiopin_request , aby określić konfigurację siły dysku dla co najmniej jednego pinezki GPIO. Następnie przekaż gpiopin_request
i GPIO_SET_PIN_CONFIG_IOCTL w połączeniu IOCTL.
Poniższy wstawka kodu pokazuje, jak ustawić siłę dysku dwóch pinezki GPIO, które są określone w lineoffsets
tablicy gpiopin_request
struktury.
//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;
}
Zamykanie obiektu zasad grupy
Aby zamknąć obiekt GPIO, wywołaj funkcję POSIX zamknij().
Pomoc techniczna mt3620
Obsługiwane funkcje obiektu GPIO dla mikroukładu MT3620 są wymienione w sekcji Stan pomocy technicznej MT3620. Podręcznik użytkownika tablicy deweloperów MT3620 opisuje układ pinezki i funkcje przypinania w bazie danych RDB MT3620.
Folder HardwareDefinitions w katalogu instalacji zestawu Microsoft Azure Sphere SDK zawiera definicje typowych tablic programistycznych, modułów i mikroukładów Platformy Azure Sphere. Zawiera ona pliki nagłówków i JSON definiujące interfejsy główne bazy danych MT3620, MT3620 RDB oraz inne sprzętowe mt3620. Domyślną lokalizacją folderu HardwareDefinitions jest C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
system Windows i /opt/azurespheresdk/HardwareDefinitions
Linux.