Usare oggetti Criteri di gruppo in applicazioni di alto livello

Azure Sphere supporta GPIO (general-purpose input/output). GPIO è un tipo di pin digitale programmabile su un circuito integrato. Gli oggetti Criteri di gruppo non hanno funzionalità predefinite e il loro comportamento può essere personalizzato da un'applicazione. Alcuni usi comuni per gli oggetti Criteri di gruppo sono la modifica dello stato dei dispositivi hardware, il controllo dei LED e la lettura dello stato delle opzioni.

Nota

Questo argomento descrive come usare oggetti Criteri di gruppo in un'applicazione di alto livello. Per informazioni sull'uso di GPIO in RTApps, vedere Utilizzare periferiche in un'applicazione in tempo reale .

Le applicazioni di alto livello Azure Sphere possono comunicare con gpio chiamando applibs GPIO API. Nell'esempio GPIO_HighLevelApp viene illustrato come comunicare con oggetti Criteri di gruppo in un dispositivo MT3620.

Per GPIO sono supportate le operazioni seguenti:

  • Leggere l'input
  • Impostare l'output su alto o basso
  • Polling/interrupt software

Requisiti GPIO

Le applicazioni che comunicano con gli oggetti Criteri di gruppo devono includere i file di intestazione appropriati per GPIO e aggiungere le impostazioni GPIO al manifesto dell'applicazione.

Tutte le applicazioni devono impostare l'hardware di destinazione e includere il file di intestazione di definizione hardware corrispondente.

File di intestazione

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

Sostituire "path-to-your-target-hardware.h" con il percorso del file di intestazione per l'hardware.

Impostazioni del manifesto dell'applicazione

Le impostazioni di GPIO nel manifesto dell'applicazione elencano gli oggetti Criteri di gruppo a cui l'applicazione accede. Solo un'applicazione può usare un GPIO alla volta. Per configurare queste impostazioni, aggiungere la Gpio funzionalità al manifesto dell'applicazione e quindi aggiungere ogni GPIO alla funzionalità. Il manifesto dell'applicazione Azure Sphere ha maggiori dettagli.

Nel codice usare le costanti definite per l'hardware per identificare gli oggetti Criteri di gruppo. Il compilatore tradurrà questi valori in valori non elaborati quando si compila l'app.

Ad esempio, ecco un estratto di un manifesto dell'applicazione per un'applicazione che si rivolge a una scheda di sviluppo di riferimento per MT3620 (RDB) e acquisisce tre dei suoi GPIO (1, 8 e 12):

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

Il seguente estratto mostra come specificare gli stessi GPIO in un'applicazione che si rivolge a Avnet MT3620 Starter Kit:

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

Aprire un GPIO come input

Se è necessario leggere da un GPIO ma non scrivervi, è possibile aprirlo come input. Chiamare GPIO_OpenAsInput per aprire un GPIO e impostarlo per l'input. In questo modo verrà recuperato un descrittore di file per le operazioni su GPIO. È possibile leggere da un GPIO mentre è impostato per l'input, ma non è possibile scrivere su di esso. Se un GPIO è impostato per l'input, è necessario chiuderlo prima di impostarlo per l'output.

Aprire un GPIO come output

Se è necessario scrivere in un GPIO, è necessario aprirlo come output. Chiamare GPIO_OpenAsOutput per aprire un GPIO e impostarlo per l'output. In questo modo verrà recuperato un descrittore di file per le operazioni su GPIO, impostare la modalità di output e il valore iniziale. Quando un GPIO è impostato per l'output, è possibile scrivere su di esso e leggere da esso. Se un GPIO è impostato per l'output, è necessario chiuderlo prima di impostarlo su input.

Sondaggio su GPIO

Quando il GPIO è aperto, è possibile monitorarlo per gli eventi, ad esempio la pressione di un pulsante. A questo scopo, è necessario configurare un timer per il polling di GPIO. Gli interrupt hardware per gpio non sono supportati in Azure Sphere, quindi è necessario usare i sondaggi. Nell'esempio GPIO viene illustrato come eseguire il polling di un GPIO.

Leggere da un GPIO

Per leggere da GPIO, chiamare GPIO_GetValue.

Scrivere in un GPIO

Per scrivere a un GPIO, chiamare GPIO_SetValue.

Impostare la potenza di guida di un GPIO

La potenza dell'unità di un pin GPIO si riferisce alla quantità di corrente utilizzata per guidarlo. In genere, questa quantità di corrente è impostata su un valore predefinito. Tuttavia, alcuni scenari, ad esempio LED più luminosi o una maggiore potenza dei sensori, richiedono l'ottimizzazione della potenza dell'unità con determinati pin GPIO.

Per impostare la potenza dell'unità, usa innanzitutto la struttura gpiopin_request per specificare la configurazione della potenza dell'unità per uno o più pin GPIO. gpiopin_request Passare quindi e GPIO_SET_PIN_CONFIG_IOCTL in una chiamata IOCTL.

Il frammento di codice seguente illustra come impostare la potenza dell'unità di due pin GPIO, specificati nella lineoffsets matrice della gpiopin_request struttura.

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

Chiudere un GPIO

Per chiudere GPIO, chiamare la funzione POSIX close().

Supporto per MT3620

Le funzionalità supportate di GPIO per il chip MT3620 sono elencate nello stato del supporto per MT3620. Il manuale dell'utente della bacheca di sviluppo MT3620 descrive le funzioni di layout dei piedini e pin nel database RDB di MT3620.

La cartella HardwareDefinitions nella directory di installazione di Microsoft Azure Sphere SDK contiene le definizioni per comuni schede di sviluppo, moduli e chip di Azure Sphere. Contiene file di intestazione e JSON che definiscono le interfacce master per MT3620, MT3620 RDB, insieme ad altri hardware MT3620. Il percorso predefinito per la cartella HardwareDefinitions è C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions in Windows e /opt/azurespheresdk/HardwareDefinitions su Linux.