Üst düzey uygulamalarda GPO'ları kullanma

Azure Sphere GPO'ları (genel amaçlı giriş/çıkış) destekler. GPIO, tümleşik devrede programlanabilir dijital pin türüdür. GPO'ların önceden tanımlanmış işlevleri yoktur ve davranışları bir uygulama tarafından özelleştirilebilir. GPO'ların yaygın kullanımlarından bazıları donanım cihazlarının durumunu değiştirmek, LED'leri denetlemek ve anahtarların durumunu okumaktır.

Not

Bu konuda, GPO'ların üst düzey bir uygulamada nasıl kullanılacağı açıklanmaktadır. RTApps'te GPIO kullanımı hakkında bilgi için bkz. Gerçek zamanlı özellikli bir uygulamada çevre birimleri kullanma.

Azure Sphere üst düzey uygulamaları, Applibs GPIO API'lerini çağırarak GPO'larla iletişim kurabilir. GPIO_HighLevelApp örneği, BIR MT3620 cihazında GPO'larla nasıl iletişim kurduğunu gösterir.

GPIO için aşağıdaki işlemler desteklenir:

  • Girişi okuma
  • Çıkışı yüksek veya düşük olarak ayarlama
  • Yoklama / yazılım kesintileri

GPIO gereksinimleri

GPO'larla iletişim kuran uygulamaların GPIO için uygun üst bilgi dosyalarını içermesi ve uygulama bildirimine GPIO ayarları eklemesi gerekir.

Tüm uygulamaların hedef donanımlarını ayarlaması ve karşılık gelen donanım tanımı üst bilgi dosyasını içermesi gerekir.

Üst Bilgi Dosyaları

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

"path-to-your-target-hardware.h" yerine donanımınızın üst bilgi dosyasının yolunu yazın.

Uygulama bildirimi ayarları

Uygulama bildirimindeki GPIO ayarları, uygulama tarafından erişilen GPO'ları listeler. Aynı anda yalnızca bir uygulama GPIO kullanabilir. Bu ayarları yapılandırmak için, özelliği uygulama bildirimine ekleyin Gpio ve ardından her GPIO'yu özelliğe ekleyin. Azure Sphere uygulama bildiriminin daha fazla ayrıntısı vardır.

Kodunuzda, GPO'ları tanımlamak için donanımınız için tanımlanan sabitleri kullanın. Derleyici, uygulamayı oluştururken bu değerleri ham değerlere çevirir.

Örneğin, mt3620 başvuru geliştirme panosunu (RDB) hedefleyen ve GPO'larından üçünü (1, 8 ve 12) alan bir uygulamanın uygulama bildiriminden bir alıntı aşağıda verilmiştir:

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

Aşağıdaki alıntı, Avnet MT3620 Starter Kit'i hedefleyen bir uygulamada aynı GPO'ların nasıl belirtileceğini gösterir:

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

GpIO'yu giriş olarak açma

GPIO'dan okumanız ancak yazmanız gerekmiyorsa, giriş olarak açabilirsiniz. GPIO'yu açmak ve giriş olarak ayarlamak için GPIO_OpenAsInput'yi çağır. Bu, GPIO üzerindeki işlemler için bir dosya tanımlayıcısı alır. Giriş olarak ayarlanmış bir GPIO'dan okuyabilirsiniz, ancak buna yazamazsınız. GpIO giriş olarak ayarlandıysa, çıkış olarak ayarlayabilmeniz için önce kapatmanız gerekir.

GpIO'yu çıkış olarak açma

GPIO'ya yazmanız gerekiyorsa, bunu çıkış olarak açmanız gerekir. GPIO'yu açmak ve çıkış olarak ayarlamak için GPIO_OpenAsOutput'yi çağır. Bu işlem GPIO'da işlemler için bir dosya tanımlayıcısı alır, çıkış modunu ve başlangıç değerini ayarlar. Bir GPIO çıkış olarak ayarlandığında, gpio'ya yazabilir ve buradan okuyabilirsiniz. Bir GPIO çıkış olarak ayarlandıysa, giriş olarak ayarlayabilmeniz için önce gpio'yu kapatmanız gerekir.

GPIO'yu yoklama

GPIO açık olduğunda, düğmeye basma gibi olaylar için izleyebilirsiniz. Bunu yapmak için GPIO'yu yoklaması için bir zamanlayıcı ayarlamanız gerekir. GPO'lar için donanım kesintileri Azure Sphere'da desteklenmez, bu nedenle yoklamayı kullanmanız gerekir. GPIO örneği, bir GPIO'yu nasıl yoklama yapılacağını gösterir.

GPIO'dan okuma

GPIO'dan okumak için GPIO_GetValue'ı arayın.

GPIO'ya yazma

GPIO'ya yazmak için GPIO_SetValue'ı arayın.

GPIO'nun sürücü gücünü ayarlama

GPIO pininin sürücü gücü, onu sürmek için kullanılan akım miktarını ifade eder. Genellikle, bu geçerli miktarı varsayılan bir değere ayarlanır. Ancak, daha parlak LED'ler veya algılayıcılara daha fazla güç gibi bazı senaryolar, sürücü gücünü belirli GPIO pinlerine ayarlamayı gerektirir.

Sürücü gücünü ayarlamak için önce gpiopin_request yapısını kullanarak bir veya daha fazla GPIO pininin sürücü gücü yapılandırmasını belirtin. Ardından, bir IOCTL çağrısında geçirin gpiopin_request ve GPIO_SET_PIN_CONFIG_IOCTL .

Aşağıdaki kod parçacığı, yapı dizisinde lineoffsetsgpiopin_request belirtilen iki GPIO pininin sürücü gücünün nasıl ayarlandığını gösterir.

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

GPIO'yu kapatma

GPIO'yu kapatmak için POSIX işlevini close() çağırın.

MT3620 desteği

MT3620 yongası için desteklenen GPIO özellikleri MT3620 Destek Durumu'nda listelenir. MT3620 geliştirme panosu kullanıcı kılavuzu, MT3620 RDB'de pin düzenini ve pin işlevlerini açıklar.

Microsoft Azure Sphere SDK yükleme dizinindeki HardwareDefinitions klasörü, yaygın Azure Sphere geliştirme panoları, modülleri ve yongaları için tanımlar içerir. DIĞER MT3620 donanımlarıyla birlikte MT3620, MT3620 RDB için ana arabirimleri tanımlayan üst bilgi ve JSON dosyalarını içerir. HardwareDefinitions klasörünün varsayılan konumu Windows ve /opt/azurespheresdk/HardwareDefinitions Linux'tadırC:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions.