Delen via


GPIO's gebruiken in toepassingen op hoog niveau

Belangrijk

Dit is de Documentatie voor Azure Sphere (verouderd). Azure Sphere (verouderd) wordt op 27 september 2027 buiten gebruik gesteld en gebruikers moeten tegen deze tijd migreren naar Azure Sphere (geïntegreerd). Gebruik de versiekiezer boven de inhoudsweergave om de Documentatie van Azure Sphere (geïntegreerd) weer te geven.

Azure Sphere ondersteunt GPIO's (algemene invoer/uitvoer). Een GPIO is een type programmeerbare digitale pin op een geïntegreerd circuit. GPI's hebben geen vooraf gedefinieerde functionaliteit en hun gedrag kan worden aangepast door een toepassing. Sommige veelvoorkomende toepassingen voor GPIO's zijn het wijzigen van de status van hardwareapparaten, het beheren van LED's en het lezen van de status van switches.

Notitie

In dit onderwerp wordt beschreven hoe u GPIO's gebruikt in een toepassing op hoog niveau. Zie Randapparatuur gebruiken in een realtime geschikte toepassing voor informatie over GPIO-gebruik in RTApps.

Azure Sphere-toepassingen op hoog niveau kunnen communiceren met GPIOs door GPIO-API's van Applibs aan te roepen. Het GPIO_HighLevelApp voorbeeld laat zien hoe u kunt communiceren met GPIO's op een MT3620-apparaat.

De volgende bewerkingen worden ondersteund voor GPIO:

  • Invoer lezen
  • Uitvoer instellen op hoog of laag
  • Polling/softwareonderbrekingen

GPIO-vereisten

Toepassingen die communiceren met GPIOs moeten de juiste headerbestanden voor GPIO bevatten en GPIO-instellingen toevoegen aan het toepassingsmanifest.

Alle toepassingen moeten hun doelhardware instellen en het bijbehorende headerbestand voor hardwaredefinities bevatten.

Koptekstbestanden

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

Vervang 'path-to-your-target-hardware.h' door het pad naar het headerbestand voor uw hardware.

Toepassingsmanifestinstellingen

De GPIO-instellingen in het toepassingsmanifest vermelden de GPIO's die door de toepassing worden geopend. Slechts één toepassing kan een GPIO tegelijk gebruiken. Als u deze instellingen wilt configureren, voegt u de Gpio mogelijkheid toe aan het toepassingsmanifest en voegt u vervolgens elke GPIO toe aan de mogelijkheid. Het Azure Sphere-toepassingsmanifest bevat meer details.

Gebruik in uw code de constanten die zijn gedefinieerd voor uw hardware om de GPI's te identificeren. De compiler vertaalt deze waarden naar onbewerkte waarden wanneer u de app bouwt.

Hier volgt bijvoorbeeld een fragment van een toepassingsmanifest voor een toepassing die is gericht op een MT3620-referentieontwikkelingsbord (RDB) en drie van de GPIO's (1, 8 en 12) verkrijgt:

"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]

In het volgende fragment ziet u hoe u dezelfde GPIO's opgeeft in een toepassing die gericht is op de Avnet MT3620 Starter Kit:

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

Een GPIO openen als invoer

Als u wilt lezen van een GPIO maar er niet naar wilt schrijven, kunt u het openen als invoer. Roep GPIO_OpenAsInput aan om een GPIO te openen en in te stellen op invoer. Hiermee wordt een bestandsdescriptor opgehaald voor bewerkingen in de GPIO. U kunt lezen vanuit een GPIO terwijl deze is ingesteld op invoer, maar u kunt er niet naar schrijven. Als een GPIO is ingesteld op invoer, moet u deze sluiten voordat u deze kunt instellen op uitvoer.

Een GPIO als uitvoer openen

Als u naar een GPIO moet schrijven, moet u deze openen als uitvoer. Roep GPIO_OpenAsOutput aan om een GPIO te openen en deze in te stellen op uitvoer. Hiermee haalt u een bestandsdescriptor op voor bewerkingen in de GPIO, stelt u de uitvoermodus en de initiële waarde in. Wanneer een GPIO is ingesteld op uitvoer, kunt u ernaar schrijven en ermee lezen. Als een GPIO is ingesteld op uitvoer, moet u deze sluiten voordat u deze kunt instellen op invoer.

Een GPIO peilen

Wanneer de GPIO is geopend, kunt u deze controleren op gebeurtenissen, zoals een knop drukken. Hiervoor moet u een timer instellen om de GPIO te peilen. Hardwareonderbrekingen voor GPIO's worden niet ondersteund op Azure Sphere, dus u moet polling gebruiken. Het GPIO-voorbeeld laat zien hoe u een GPIO kunt peilen.

Lezen vanuit een GPIO

Als u wilt lezen vanuit de GPIO, roept u GPIO_GetValue aan.

Schrijven naar een GPIO

Als u naar een GPIO wilt schrijven, roept u GPIO_SetValue aan.

De stationssterkte van een GPIO instellen

De stationssterkte van een GPIO-pin verwijst naar de hoeveelheid stroom die wordt gebruikt om deze te besturen. Normaal gesproken is dit aantal huidige waarden ingesteld op een standaardwaarde. Sommige scenario's, zoals helderdere LED's of meer vermogen voor sensoren, vereisen echter het afstemmen van de stationssterkte op bepaalde GPIO-pinnen.

Als u de aandrijfsterkte wilt instellen, gebruikt u eerst de gpiopin_request structuur om de configuratie van de stationssterkte voor een of meer GPIO-pinnen op te geven. Geef vervolgens door gpiopin_request en GPIO_SET_PIN_CONFIG_IOCTL in een IOCTL-aanroep.

Het volgende codefragment laat zien hoe u de stationssterkte van twee GPIO-pinnen instelt, die zijn opgegeven in de lineoffsets matrix van de gpiopin_request structuur.

//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;
}

Een GPIO sluiten

Als u de GPIO wilt sluiten, roept u de POSIX-functie close() aan.

Ondersteuning voor MT3620

De ondersteunde GPIO-functies voor de MT3620-chip worden vermeld in de ondersteuningsstatus van MT3620. In de gebruikershandleiding van het MT3620-ontwikkelbord worden de functies voor de speldindeling en speld op de MT3620 RDB beschreven.

De map HardwareDefinitions in de installatiemap van de Microsoft Azure Sphere SDK bevat definities voor algemene Azure Sphere-ontwikkelborden, modules en chips. Het bevat header- en JSON-bestanden die de hoofdinterfaces definiëren voor de MT3620, MT3620 RDB, samen met andere MT3620-hardware. De standaardlocatie voor de map HardwareDefinitions bevindt zich C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions in Windows en /opt/azurespheresdk/HardwareDefinitions in Linux.

De Opslagplaats Azure Sphere-voorbeelden op GitHub bevat header- en JSON-bestanden die SPI-masterinterfaces definiëren voor de MT3620-chip en MT3620 RDB, samen met andere MT3620-hardware.-->