ボタン(IO)状態の読み取り

 

IOの読み出し

下記のコードが参考になります。

const uint32 u32btn_mask = ((1 << 9) | (1 << 10)); // DIO9,10を読み取り対象に。
uint32 u32read_io;

vAHI_DioSetDirection(u32btn_mask, 0); // IOを読み取りモードに
//vAHI_DioSetPullup(u32btn_mask, 0); // プルアップの設定(デフォルトで設定されている)
u32read_io = (u32AHI_DioReadInput() & u32btn_mask) ^ u32btn_mask;
              // ボタン押下時は LO になるのでXORでビット反転する。

※ 内部プルアップを設定していれば(デフォルト)、ボタンをIOに接続する際、プルアップ抵抗を省略できます。が、通常はプルアップ抵抗追加を推奨します。
※ u32read_io には読み取ったボタンのビットが設定されます。(DIO9なら 1<<9 のビットが立ちます)
※ チャタリングの考慮は別途行う必要があります。

割り込み

以下の例では DIO9, DIO10 の変化により割り込みハンドラーが呼び出されます。割り込みは E_AHI_DEVICE_SYSCTRL イベントとして伝えられます。

const uint32 u32btn_mask = ((1 << 9) | (1 << 10)); // DIO9,10

void vInitFunc() {
    ...
	vAHI_DioInterruptEnable(u32btn_mask, 0); // 割り込みの登録
}

/* AppQAPI による割り込み遅延実行のハンドラ */
PRIVATE void vProcessIncomingHwEvent(AppQApiHwInd_s *psAHI_Ind)
{
switch (psAHI_Ind-u32DeviceId) {
case E_AHI_DEVICE_SYSCTRL:
if (psAHI_Ind-u32ItemBitmap & u32btn_mask) {
... 割り込み源が指定したボタンであった ...
}
break;
}
}

※ 割り込みハンドラの詳細についてはタイマー割り込みを参照ください。

ウェイクアップ

スリープの起床に DIO の割り込みを利用できます。以下の例では、vDoSleep() がスリープ手続きを行っています。AppWarmStart の先頭(ウォームスタート直後)に u32AHI_DioWakeStatus() を用いれば、DIO割り込みによる起床かどうか判定できます。

const uint32 u32btn_mask = ((1 << 9) | (1 << 10)); // DIO9,10

void vDoSleep() {
	...
	
    // 事前に通常割り込みを禁止する
	vAHI_DioInterruptEnable(0, u32btn_mask); 
    
	...
    
    // 割り込みハンドラの登録
	vAHI_DioWakeEnable(u32btn_mask, 0);
 	vAHI_DioWakeEdge(0, u32btn_mask); // 立下り検出
 
    
    // 内蔵フラッシュの停止
    vAHI_FlashPowerDown();

    // スリープ
	vAHI_Sleep(E_AHI_SLEEP_OSCON_RAMON);
	
    // 他のコードが実行されないようにブロック
    while(1);
}

PUBLIC void AppWarmStart(void) {
	// 起床要因のチェック (u32AHI_Init の前に呼ぶ)
	if(u32AHI_DioWakeStatus() & u32btn_mask) {
    	// この場合、ボタンによる起床であった
    }

	// initialize AHI
	(void)u32AHI_Init();
    ...
}

※ 事前に通常の割り込みは禁止します。ほぼ同時に通常のDIO割り込みが発生しても何も実行しないようにします。
※ チャタリングの禁止などの処理を行う場合に必要な時計には、2系統ある wakeup timer のカウント値を利用することも出来ます。

TWELITE
TWELITE
DIP
DIP
UART
UART
CUE
CUE
ARIA
ARIA
PAL
PAL
STICK
STICK
spot
SPOT
R3
R3
STARTER KIT
STARTER KIT
アンテナ
アンテナ
製品一覧
製品一覧

モノをつなぐ無線

モノをつなぐ無線
モノの無線
導入事例
導入事例
選び方
選び方
小型
小型
省電力
省電力
多数接続
多数接続
コントロール
コントロール
モニタリング
モニタリング
ソフトウエア
ソフトウエア
親機
親機
中継機
中継機
子機
子機
始め方
始め方

評価開発環境

STAGE
STAGE
STAGE APP
STAGE APP
interactive
アプリ設定
アプリ書換
アプリ書換
プログラミング
プログラミング