高度なアプリケーションで GPIO を使用する
重要
これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。
Azure Sphere は GPIO (汎用入出力) をサポートしています。 GPIO は、IC 上のプログラミング可能なデジタル ピンの一種です。 GPIO は定義済みの機能がなく、その動作は、アプリケーションでカスタマイズできます。 GPIO の一般的な使用法は、ハードウェア デバイスの状態の変更、LED の制御、およびスイッチの状態の読み取りです。
Note
このトピックでは、高度なアプリケーションで GPIO を使用する方法について説明します。 RTApp での GPIO の使用法については、「リアルタイム対応アプリケーションでの周辺機器の使用」をご覧ください。
高度な Azure Sphere アプリケーションは、Applibs GPIO API を呼び出すことによって GPIO と通信します。 GPIO_HighLevelApp サンプルは、MT3620 デバイス上で GPIO と通信する方法を示します。
GPIO には次の操作がサポートされています。
- 入力の読み取り
- 出力を高または低に設定
- ポーリング/ソフトウェア割り込み
GPIO の要件
GPIO と通信するアプリケーションでは、GPIO に適したヘッダー ファイルを追加し、GPIO の設定をアプリケーション マニフェストに追加する必要があります。
すべてのアプリケーションで、ターゲット ハードウェアを設定し、対応するハードウェア定義ヘッダー ファイルをインクルードする必要があります。
ヘッダー ファイル
#include <applibs/gpio.h>
#include "path-to-your-target-hardware.h"
"path-to-your-target-hardware.h" を、お使いのハードウェアのヘッダー ファイルへのパスに置き換えます。
アプリケーション マニフェストの設定
アプリケーション マニフェストの GPIO 設定は、アプリケーションがアクセスする GPIO を一覧表示します。 一度に GPIO を使用できるアプリケーションは 1 つのみです。 これらの設定を構成するには、Gpio
機能をアプリケーション マニフェストに追加し、各 GPIO を機能に追加します。 Azure Sphere アプリケーション マニフェスト に詳細が含まれています。
コードでは、ハードウェアに対して定義されている定数を使用して GPIO を識別します。 アプリをビルドするときに、これらの値がコンパイラによって生の値に変換されます。
たとえば、MT3620 参照開発ボード (RDB) をターゲットとし、3 つの GPIO (1、8、および 12) を取得するアプリケーションのアプリケーション マニフェストからの抜粋を次に示します。
"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
次の抜粋は、Avnet MT3620 スタート キットをターゲットとするアプリケーション内で同じ GPIO を指定する方法を示しています。
"Gpio": [ "$AVNET_MT3620_SK_GPIO1", "$AVNET_MT3620_SK_USER_LED_RED", "$AVNET_MT3620_SK_USER_BUTTON_A" ]
入力として GPIO を開く
GPIO から読み取る必要はあるものの、書き込みをしない場合は、入力として GPIO を開くことができます。 GPIO を開いて、入力に設定するには、GPIO_OpenAsInput を呼び出します。 これは、GPIO に対する操作のファイル記述子を取得します。 入力に設定されていると、GPIO から読み取ることはできますが、書き込むことはできません。 入力に設定されている GPIO を出力に設定するには、設定する前に閉じる必要があります。
出力として GPIO を開く
GPIO に書き込む場合は、出力として開く必要があります。 GPIO を開いて、出力に設定するには、GPIO_OpenAsOutput を呼び出します。 これは、GPIO に対する操作のファイル記述子を取得し、出力モードおよび初期値を設定します。 GPIO が出力に設定されていると、書き込みも読み取りもできます。 出力に設定されている GPIO を入力に設定するには、設定する前に閉じる必要があります。
GPIO をポーリングする
GPIO が開いているときは、ボタンを押すなどのイベントを監視できます。 これを行うには、GPIO をポーリングするタイマーを設定する必要があります。 Azure Sphere では GPIO のハードウェア割り込みがサポートされていないので、ポーリングを使用する必要があります。 GPIO サンプルは、GPIO をポーリングする方法を示します。
GPIO から読み取る
GPIO から読み取るには、GPIO_GetValue を呼び出します。
GPIO へ書き込む
GPIO へ書き込むには、GPIO_SetValue を呼び出します。
GPIO のドライブ強度を設定する
GPIO ピンのドライブ強度は、そのピンの駆動に使用される電流の量を指します。 通常、この電流量は既定値に設定されます。 ただし、明るい LED やセンサーへの電力の増加など、一部のシナリオでは、ドライブの強度を特定の GPIO ピンに調整する必要があります。
ドライブの強度を設定するには、最初に gpiopin_request 構造を使用して、1 つ以上の GPIO ピンのドライブ強度構成を指定します。 次に、IOCTL 呼び出しで gpiopin_request
と GPIO_SET_PIN_CONFIG_IOCTL を渡します。
次のコード スニペットは、gpiopin_request
構造体のlineoffsets
配列で指定されている 2 つの GPIO ピンのドライブ強度を設定する方法を示しています。
//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 を閉じる
GPIO を閉じるには、POSIX 関数の close() を呼び出します。
MT3620 サポート
MT3620 チップでサポートされている GPIO 機能については、「MT3620 サポートの状態」の一覧を参照してください。 MT3620 RDB 上のピンのレイアウトと機能については、「MT3620 開発ボードのユーザー ガイド」を参照してください。
Microsoft Azure Sphere SDK インストール ディレクトリの HardwareDefinitions フォルダーには、一般的な Azure Sphere 開発ボード、モジュール、チップの定義が含まれています。 これには、MT3620、MT3620 RDB、およびその他の MT3620 ハードウェアのマスター インターフェイスを定義するヘッダーファイルと JSON ファイルが含まれています。 HardwareDefinitions フォルダーの既定の場所は、Windows では C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
され、Linux では /opt/azurespheresdk/HardwareDefinitions
されます。
GitHub 上の Azure Sphere Samples リポジトリには、 MT3620 チップ および MT3620 RDB の SPI マスター インターフェイスを定義するヘッダーファイルと JSON ファイルと、その他の MT3620 ハードウェア 含まれています-->