Udostępnij za pośrednictwem


Korzystanie z obiektów zasad grupy w aplikacjach wysokiego poziomu

Ważne

Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).

Usługa Azure Sphere obsługuje obiekty zasad grupy (dane wejściowe/wyjściowe ogólnego przeznaczenia). GPIO to typ programowalnego cyfrowego wyprowadzenia w obwodzie zintegrowanym. Obiekty zasad grupy nie mają wstępnie zdefiniowanych funkcji i ich zachowanie można dostosować przez aplikację. Niektóre typowe zastosowania obiektów zasad grupy to zmiana stanu urządzeń sprzętowych, diod LED sterowania i odczytywanie stanu przełączników.

Uwaga

W tym temacie opisano sposób używania obiektów zasad grupy w aplikacji wysokiego poziomu. Aby uzyskać informacje na temat użycia interfejsu GPIO w usłudze RTApps, zobacz Używanie urządzeń peryferyjnych w aplikacji obsługującej czas rzeczywistym.

Aplikacje wysokiego poziomu usługi Azure Sphere mogą komunikować się z obiektami zasad grupy, wywołując interfejsy API gpIO usługi Applibs. W przykładzie GPIO_HighLevelApp pokazano, jak komunikować się z obiektami zasad grupy na urządzeniu MT3620.

Następujące operacje są obsługiwane w przypadku gpIO:

  • Odczytywanie danych wejściowych
  • Ustawianie danych wyjściowych na wysokie lub niskie
  • Sondowanie/przerwania oprogramowania

Wymagania dotyczące gpIO

Aplikacje komunikujące się z obiektami zasad grupy muszą zawierać odpowiednie pliki nagłówkowe dla gpIO i dodać ustawienia gpIO do manifestu aplikacji.

Wszystkie aplikacje muszą ustawić sprzęt docelowy i dołączyć odpowiedni plik nagłówka definicji sprzętu.

Pliki nagłówkowe

 #include <applibs/gpio.h>
 #include "path-to-your-target-hardware.h"

Zastąp ciąg "path-to-your-target-hardware.h" ścieżką do pliku nagłówka dla sprzętu.

Ustawienia manifestu aplikacji

Ustawienia funkcji GPIO w manifeście aplikacji zawierają listę obiektów zasad grupy, do których uzyskuje się dostęp przez aplikację. Jednocześnie tylko jedna aplikacja może używać gpIO. Aby skonfigurować te ustawienia, dodaj Gpio możliwość do manifestu aplikacji, a następnie dodaj poszczególne gpIO do możliwości. Manifest aplikacji usługi Azure Sphere zawiera więcej szczegółów.

W kodzie użyj stałych zdefiniowanych dla sprzętu, aby zidentyfikować obiekty zasad grupy. Kompilator przełoży te wartości na nieprzetworzone wartości podczas kompilowania aplikacji.

Na przykład poniżej przedstawiono fragment manifestu aplikacji przeznaczonego dla aplikacji, która jest przeznaczona dla tablicy deweloperskiej referencyjnej MT3620 (RDB) i uzyskuje trzy jej obiekty zasad grupy (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 zasad grupy w aplikacji przeznaczonej dla zestawu startowego Avnet MT3620:

"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]

Otwieranie gpIO jako danych wejściowych

Jeśli musisz odczytać z gpIO, ale nie zapisać go, możesz go otworzyć jako dane wejściowe. Wywołaj GPIO_OpenAsInput , aby otworzyć gpIO i ustawić go na dane wejściowe. Spowoduje to pobranie deskryptora plików dla operacji na gpIO. Można odczytać z gpIO, gdy jest on ustawiony na dane wejściowe, ale nie można go zapisać. Jeśli gpIO jest ustawione na dane wejściowe, należy go zamknąć , zanim będzie można ustawić go na dane wyjściowe.

Otwieranie gpIO jako danych wyjściowych

Jeśli musisz zapisać w gpIO, musisz otworzyć go jako dane wyjściowe. Wywołaj GPIO_OpenAsOutput , aby otworzyć gpIO i ustawić go na dane wyjściowe. Spowoduje to pobranie deskryptora plików dla operacji na gpIO, ustawienie trybu wyjściowego i wartość początkową. Gdy gpIO jest ustawiony na dane wyjściowe, możesz zapisać go i odczytać z niego. Jeśli gpIO jest ustawione na dane wyjściowe, należy go zamknąć , zanim będzie można ustawić go na dane wejściowe.

Sonduj gpIO

Po otwarciu gpIO można monitorować je pod kątem zdarzeń, takich jak naciśnięcie przycisku. W tym celu należy skonfigurować czasomierz do sondowania gpIO. Przerwania sprzętowe obiektów zasad grupy nie są obsługiwane w usłudze Azure Sphere, dlatego należy używać sondowania. Przykład GPIO pokazuje, jak sondować gpIO.

Odczyt z gpIO

Aby odczytać z gpIO, wywołaj GPIO_GetValue.

Zapisywanie w gpIO

Aby zapisać w gpIO, wywołaj GPIO_SetValue.

Ustawianie siły dysku GPIO

Siła napędu wyprowadzenia GPIO odnosi się do ilości prądu używanego do jego napędu. Zazwyczaj ta ilość bieżącej jest ustawiona na wartość domyślną. Jednak niektóre scenariusze, takie jak jaśniejsze diody LED lub zwiększona moc czujników, wymagają dostrajania siły napędu do niektórych wyprowadzeń GPIO.

Aby ustawić siłę dysku, najpierw użyj struktury gpiopin_request , aby określić konfigurację siły dysku dla co najmniej jednego wyprowadzenia GPIO. Następnie przekaż gpiopin_request i GPIO_SET_PIN_CONFIG_IOCTL w wywołaniu IOCTL.

Poniższy fragment kodu pokazuje, jak ustawić siłę dysku dwóch wyprowadzeń 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 gpIO

Aby zamknąć gpIO, wywołaj funkcję POSIX close().

Obsługa mt3620

Obsługiwane funkcje GPIO dla mikroukładu MT3620 są wymienione w stanie pomocy technicznej MT3620. Podręcznik użytkownika tablicy deweloperów MT3620 opisuje układ pinezki i funkcje pinezki w bazie danych RDB MT3620.

Folder HardwareDefinitions w katalogu instalacyjnym zestawu SDK usługi Microsoft Azure Sphere zawiera definicje typowych tablic deweloperskich, modułów i mikroukładów usługi Azure Sphere. Zawiera on pliki nagłówkowe i JSON, które definiują interfejsy główne dla mt3620, MT3620 RDB, wraz z innym sprzętem MT3620. Domyślną lokalizacją folderu HardwareDefinitions jest C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions system Windows i /opt/azurespheresdk/HardwareDefinitions Linux.

Repozytorium przykładów usługi Azure Sphere w usłudze GitHub zawiera pliki nagłówkowe i JSON, które definiują interfejsy główne SPI dla mikroukładu MT3620 i bazy danych RDB MT3620, wraz z innymi sprzętami MT3620.>