Menggunakan GPIO dalam aplikasi tingkat tinggi
Azure Sphere mendukung GPIO (input/output tujuan umum). GPIO adalah jenis pin digital yang dapat diprogram di sirkuit terintegrasi. GPIO tidak memiliki fungsionalitas yang sudah ditentukan sebelumnya dan perilakunya dapat dikustomisasi oleh aplikasi. Beberapa penggunaan umum untuk GPIO adalah untuk mengubah status perangkat keras, mengontrol LED, dan membaca status sakelar.
Catatan
Topik ini menjelaskan cara menggunakan GPIO dalam aplikasi tingkat tinggi. Lihat Menggunakan periferal dalam aplikasi berkemampuan real-time untuk informasi tentang penggunaan GPIO di RTApps.
Aplikasi tingkat tinggi Azure Sphere dapat berkomunikasi dengan GPIO dengan menghubungi API GPIO Applibs. Sampel GPIO_HighLevelApp menunjukkan cara berkomunikasi dengan GPIO di perangkat MT3620.
Operasi berikut ini didukung untuk GPIO:
- Membaca input
- Mengatur output ke tinggi atau rendah
- Polling / interupsi perangkat lunak
Persyaratan GPIO
Aplikasi yang berkomunikasi dengan GPIO harus menyertakan file header yang sesuai untuk GPIO dan menambahkan pengaturan GPIO ke manifes aplikasi.
Semua aplikasi harus mengatur perangkat keras target mereka dan menyertakan file header definisi perangkat keras yang terkait.
File Header
#include <applibs/gpio.h>
#include "path-to-your-target-hardware.h"
Ganti "path-to-your-target-hardware.h" dengan jalur ke file header untuk perangkat keras Anda.
Pengaturan manifes aplikasi
Pengaturan GPIO dalam manifes aplikasi mencantumkan GPIO yang diakses oleh aplikasi. Hanya satu aplikasi yang dapat menggunakan GPIO dalam satu waktu. Untuk mengonfigurasi pengaturan ini, tambahkan Gpio
kapabilitas ke manifes aplikasi, lalu tambahkan setiap GPIO ke kapabilitas.
Manifes aplikasi Azure Sphere memiliki detail selengkapnya.
Dalam kode Anda, gunakan konstanta yang ditentukan untuk perangkat keras Anda untuk mengidentifikasi GPIO. Kompiler akan menerjemahkan nilai ini ke nilai mentah saat Anda menyusun aplikasi.
Misalnya, berikut kutipan dari manifes aplikasi untuk aplikasi yang menargetkan papan pengembangan referensi MT3620 (RDB) dan memperoleh tiga GPIO-nya (1, 8, dan 12):
"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Kutipan berikut ini memperlihatkan cara menentukan GPIO yang sama dalam aplikasi yang menargetkan Avnet MT3620 Starter Kit:
"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]
Membuka GPIO sebagai input
Jika Anda perlu membaca dari GPIO tetapi tidak menulis untuk itu, Anda bisa membukanya sebagai input. Hubungi GPIO_OpenAsInput untuk membuka GPIO dan atur ke input. Tindakan ini akan mengambil deskriptor file untuk operasi di GPIO. Anda dapat membaca dari GPIO saat diatur ke input, tetapi tidak dapat menulisnya. Jika GPIO diatur ke input, Anda harus menutupnya sebelum dapat mengaturnya ke output.
Membuka GPIO sebagai output
Jika Anda perlu menulis ke GPIO, Anda harus membukanya sebagai output. Hubungi GPIO_OpenAsOutput untuk membuka GPIO dan atur ke output. Ini akan mengambil deskriptor file untuk operasi pada GPIO, mengatur mode output, dan nilai awal. Ketika GPIO diatur ke output, Anda dapat menulis dan membacanya. Jika GPIO diatur ke output, Anda harus menutupnya sebelum dapat mengaturnya ke input.
Polling GPIO
Saat GPIO terbuka, Anda dapat memantaunya untuk acara, seperti penekanan tombol. Untuk melakukannya, Anda perlu menyiapkan timer untuk menjajaki GPIO. Gangguan perangkat keras untuk GPIO tidak didukung di Azure Sphere, jadi Anda perlu menggunakan polling. Sampel GPIO menunjukkan cara melakukan polling GPIO.
Membaca dari GPIO
Untuk membaca dari GPIO, hubungi GPIO_GetValue.
Menulis ke GPIO
Untuk menulis ke GPIO, hubungi GPIO_SetValue.
Mengatur kekuatan drive GPIO
Kekuatan drive pin GPIO merujuk pada jumlah saat ini yang digunakan untuk mendorongnya. Biasanya, jumlah saat ini diatur ke nilai default. Namun, beberapa skenario, seperti LED yang lebih cerah atau daya yang ditingkatkan ke sensor, memerlukan penyetelan kekuatan drive ke pin GPIO tertentu.
Untuk mengatur kekuatan drive, gunakan struktur gpiopin_request terlebih dahulu untuk menentukan konfigurasi kekuatan drive untuk satu atau beberapa pin GPIO. Berikutnya, berikan gpiopin_request
dan GPIO_SET_PIN_CONFIG_IOCTL dalam panggilan IOCTL.
Potongan kode berikut ini menunjukkan cara mengatur kekuatan drive dua pin GPIO, yang ditentukan dalam lineoffsets
array gpiopin_request
struktur.
//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;
}
Menutup GPIO
Untuk menutup GPIO, hubungi fungsi POSIX close().
Dukungan MT3620
Fitur GPIO yang didukung untuk chip MT3620 tercantum dalam Status Dukungan MT3620. Panduan pengguna papan pengembangan MT3620 menjelaskan tata letak pin dan fungsi pin pada MT3620 RDB.
Folder HardwareDefinitions di direktori penginstalan SDK Microsoft Azure Sphere berisi definisi untuk papan pengembangan, modul, dan chip Azure Sphere yang umum. Ini berisi file header dan JSON yang menentukan antarmuka master untuk MT3620, MT3620 RDB, bersama dengan perangkat keras MT3620 lainnya. Lokasi default untuk folder HardwareDefinitions ada C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
di Windows dan /opt/azurespheresdk/HardwareDefinitions
Linux.