Share via


GPIO's gebruiken in toepassingen op hoog niveau

Azure Sphere ondersteunt GPIO's (invoer/uitvoer voor algemeen gebruik). Een GPIO is een type programmeerbare digitale pin op een geïntegreerd circuit. GPIO's hebben geen vooraf gedefinieerde functionaliteit en hun gedrag kan worden aangepast door een toepassing. Enkele 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.

Opmerking

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

Azure Sphere-toepassingen op hoog niveau kunnen communiceren met GPIO's door Applibs GPIO-API's aan te roepen. Het voorbeeld van GPIO_HighLevelApp laat zien hoe u kunt communiceren met GPIOs 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 GPIO's 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 de hardwaredefinitie 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

In de GPIO-instellingen in het toepassingsmanifest worden de GPIO's vermeld waartoe de toepassing toegang heeft. 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 informatie.

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

Hier volgt bijvoorbeeld een fragment uit 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 is gericht 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 een GPIO wilt lezen, maar er niet naar wilt schrijven, kunt u deze openen als invoer. Roep GPIO_OpenAsInput aan om een GPIO te openen en deze in te stellen op invoer. Hiermee wordt een bestandsdescriptor opgehaald voor bewerkingen op de GPIO. U kunt een GPIO lezen 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 openen als uitvoer

Als u naar een GPIO wilt schrijven, moet u deze openen als uitvoer. Roep GPIO_OpenAsOutput aan om een GPIO te openen en deze in te stellen op uitvoer. Hiermee wordt een bestandsdescriptor opgehaald voor bewerkingen op de GPIO, wordt de uitvoermodus en de initiële waarde ingesteld. Wanneer een GPIO is ingesteld op uitvoer, kunt u ernaar schrijven en uitlezen. 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 druk op de knop. Hiervoor moet u een timer instellen om de GPIO te peilen. Hardwareonderbrekingen voor GPIO's worden niet ondersteund in 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 uit de GPIO, roept u GPIO_GetValue aan.

Schrijven naar een GPIO

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

De aandrijfsterkte van een GPIO instellen

De schijfsterkte van een GPIO-pin verwijst naar de hoeveelheid stroom die wordt gebruikt om deze aan te sturen. Deze hoeveelheid huidige wordt doorgaans ingesteld op een standaardwaarde. Sommige scenario's, zoals helderdere LED's of meer vermogen voor sensoren, vereisen echter het afstemmen van de aandrijfsterkte op bepaalde GPIO-pinnen.

Als u de sterkte van de aandrijving wilt instellen, gebruikt u eerst de gpiopin_request-structuur om de aandrijfsterkteconfiguratie 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 schijfsterkte 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 FUNCTIE POSIX close() aan.

MT3620-ondersteuning

De ondersteunde GPIO-functies voor de MT3620-chip worden vermeld in MT3620-ondersteuningsstatus. In de gebruikershandleiding voor het MT3620-ontwikkelbord worden de functies voor pin layout en pin 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 is C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions in Windows en /opt/azurespheresdk/HardwareDefinitions op Linux.

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