Dela via


Använda GPIOs i högnivåprogram

Viktigt!

Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).

Azure Sphere stöder GPIOs (generell användning av indata/utdata). En GPIO är en typ av programmerbar digital stift på en integrerad krets. GPIOs har inte fördefinierade funktioner och deras beteende kan anpassas av ett program. Några vanliga användningsområden för GPIOs är att ändra tillståndet för maskinvaruenheter, kontrollera lysdioder och läsa tillståndet för växlar.

Kommentar

Det här avsnittet beskriver hur du använder GPIOs i ett högnivåprogram. Mer information om GPIO-användning i RTApps finns i Använda kringutrustning i ett realtidskompatibelt program .

Azure Sphere-program på hög nivå kan kommunicera med GPIOs genom att anropa Applibs GPIO-API:er. Det GPIO_HighLevelApp exemplet visar hur du kommunicerar med GPIOs på en MT3620-enhet.

Följande åtgärder stöds för GPIO:

  • Läs indata
  • Ange utdata till hög eller låg
  • Avsökning/programavbrott

GPIO-krav

Program som kommunicerar med GPIOs måste innehålla lämpliga huvudfiler för GPIO och lägga till GPIO-inställningar i programmanifestet.

Alla program måste ange sin målmaskinvara och inkludera motsvarande rubrikfil för maskinvarudefinition.

Rubrikfiler

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

Ersätt "path-to-your-target-hardware.h" med sökvägen till huvudfilen för maskinvaran.

Inställningar för programmanifest

GPIO-inställningarna i programmanifestet listar de GPIOs som används av programmet. Endast ett program kan använda en GPIO i taget. Om du vill konfigurera de här inställningarna lägger du till Gpio funktionen i programmanifestet och lägger sedan till varje GPIO i funktionen. Azure Sphere-programmanifestet innehåller mer information.

I koden använder du de konstanter som har definierats för maskinvaran för att identifiera GPIOs. Kompilatorn översätter dessa värden till råvärden när du skapar appen.

Här är till exempel ett utdrag från ett programmanifest för ett program som riktar sig mot en MT3620-referensutvecklingstavla (RDB) och förvärvar tre av dess GPIOs (1, 8 och 12):

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

Följande utdrag visar hur du anger samma GPIOs i ett program som riktar sig till Avnet MT3620 Starter Kit:

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

Öppna en GPIO som indata

Om du behöver läsa från en GPIO men inte skriva till den kan du öppna den som indata. Anropa GPIO_OpenAsInput för att öppna en GPIO och ange den som indata. Detta hämtar en filbeskrivning för åtgärder på GPIO. Du kan läsa från en GPIO medan den är inställd på indata, men du kan inte skriva till den. Om en GPIO är inställd på indata måste du stänga den innan du kan ställa in den på utdata.

Öppna en GPIO som utdata

Om du behöver skriva till en GPIO måste du öppna den som utdata. Anropa GPIO_OpenAsOutput för att öppna en GPIO och ange den till utdata. Detta hämtar en filbeskrivning för åtgärder på GPIO, anger utdataläget och det ursprungliga värdet. När en GPIO är inställd på utdata kan du skriva till den och läsa från den. Om en GPIO är inställd på utdata måste du stänga den innan du kan ställa in den på indata.

Avsöka en GPIO

När GPIO är öppen kan du övervaka den för händelser, till exempel en knapptryckning. För att göra det måste du konfigurera en timer för att avsöka GPIO. Maskinvaruavbrott för GPIOs stöds inte på Azure Sphere, så du måste använda avsökning. GPIO-exemplet visar hur du avsöker en GPIO.

Läsa från en GPIO

Om du vill läsa från GPIO anropar du GPIO_GetValue.

Skriva till en GPIO

Om du vill skriva till en GPIO anropar du GPIO_SetValue.

Ange enhetens styrka för en GPIO

Enhetens styrka för en GPIO-stift refererar till mängden ström som används för att köra den. Normalt är den här mängden aktuell inställd på ett standardvärde. Vissa scenarier, till exempel ljusare lysdioder eller ökad ström till sensorer, kräver dock att enhetens styrka justeras till vissa GPIO-stift.

Om du vill ange enhetens styrka använder du först gpiopin_request-strukturen för att ange enhetens styrkekonfiguration för en eller flera GPIO-stift. Skicka gpiopin_request sedan och GPIO_SET_PIN_CONFIG_IOCTL i ett IOCTL-anrop.

Följande kodfragment visar hur du anger enhetsstyrkan för två GPIO-stift, som anges i lineoffsets strukturens gpiopin_request matris.

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

Stäng en GPIO

Om du vill stänga GPIO anropar du POSIX-funktionen close().

MT3620-stöd

De GPIO-funktioner som stöds för MT3620-chipet visas i supportstatus för MT3620. Användarhandboken för MT3620-utvecklingskortet beskriver pin-layouten och pin-funktionerna på MT3620 RDB.

Mappen HardwareDefinitions i installationskatalogen för Microsoft Azure Sphere SDK innehåller definitioner för vanliga Azure Sphere-utvecklingskort, moduler och chips. Den innehåller huvud- och JSON-filer som definierar huvudgränssnitten för MT3620, MT3620 RDB, tillsammans med annan MT3620-maskinvara. Standardplatsen för mappen HardwareDefinitions finns C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions i Windows och /opt/azurespheresdk/HardwareDefinitions i Linux.

Azure Sphere Samples-lagringsplatsen på GitHub innehåller huvud- och JSON-filer som definierar SPI-huvudgränssnitt för MT3620-chipet och MT3620 RDB, tillsammans med annan MT3620-maskinvara.-->