はじめに

今回は、QCA4020のGPIOを外部割り込みとして使いLEDを点灯させるアプリを作成しようと思います。最終的に今回作成するコードをWi-Fi接続アプリに取り込み、Wi-Fi接続のトリガーに使用します。QCA4020 Device Specificationより、割り込みにはGPIO27を使用します。

アプリの作成

LEDアプリ同様Helloworldをベースに作成していきます。Threadのループ内でsignalを待ち、割り込みトリガのsignalにより動きだします。まずは、Thread(Sample_thread)を生成します。
Threadでは、

- Signalの初期化
- GPIOの設定
- 割り込みの登録
- Signal受信後にLEDを点灯

の処理をします。

Signalの初期化

今回は、割り込み発生後の割り込みコンテキストを開放する手段としてSignalを使用します。そのためのSignal(qurt_signal_t)の初期化をします。

qurt_signal_init(&gpio_int_signal);

GPIOの設定

LED用には前回と同じくGPIO12をOUTPUTで使用します。Switch用にはGPIO27をINPUTで使用します。GPIOの設定は、qapi_TLMM_Config_tの各パラメーターを設定しqapi_TLMM_Config_Gpioで設定します。

// Configure GPIO12(LED)
gpio_cfg_12.func = 0;
gpio_cfg_12.dir = QAPI_GPIO_OUTPUT_E;
gpio_cfg_12.pull = QAPI_GPIO_PULL_DOWN_E;
gpio_cfg_12.drive = QAPI_GPIO_4P0MA_E;
gpio_cfg_12.pin = 12;
// Drive GPIO with high value
qapi_TLMM_Get_Gpio_ID(&gpio_cfg_12, &gpio_id_12);
qapi_TLMM_Config_Gpio(gpio_id_12, &gpio_cfg_12);
// Configure GPIO27(Switch)
gpio_cfg_27.func = 0;
gpio_cfg_27.dir = QAPI_GPIO_INPUT_E;
gpio_cfg_27.pull = QAPI_GPIO_PULL_UP_E;
gpio_cfg_27.drive = QAPI_GPIO_2MA_E;
gpio_cfg_27.pin = 27;
qapi_TLMM_Get_Gpio_ID(&gpio_cfg_27, &gpio_id_27);
qapi_TLMM_Config_Gpio(gpio_id_27, &gpio_cfg_27);

割り込みの登録

GPIO27に対してFallingのエッジトリガーでハンドラーを登録します。

qapi_GPIOINT_Register_Interrupt(&int_handle,
				27,
				pfnCallback,
				0,
				QAPI_GPIOINT_TRIGGER_EDGE_FALLING_E,
				QAPI_GPIOINT_PRIO_MEDIUM_E,
				false);
============================
static void pfnCallback(qapi_GPIOINT_Callback_Data_t data)
{
	qurt_signal_set(&gpio_int_signal, 1);
}

Signal受信後にLEDを点灯

割り込みハンドラーからの通知を受け取るためのSignal待ち状態にします。割り込み発生時に割り込みハンドラーからsignalをセットし、ThreadでSignal受信後にLEDを点灯します。

while(true) {
    qurt_signal_wait(&gpio_int_signal, 1, QURT_SIGNAL_ATTR_CLEAR_MASK);
    qapi_TLMM_Drive_Gpio(gpio_id_12, gpio_cfg_12.pin, QAPI_GPIO_HIGH_VALUE_E);
}

まとめ

今回は、リファレンスボードを使いスイッチからの割り込み契機でLEDを点灯させるアプリを作成してみました。次回はこれまでの作成したものを使いWPSを使用してWi-Fi接続するアプリを作成します。

QCA4020にご興味がありましたら以下までお問い合わせください。

お問い合わせ

製品に関するお問い合わせは以下リンクよりご用命ください。

Qualcomm メーカー情報Topへ

Qualcomm メーカー情報Topページへ戻りたい方は、以下をクリックください。