Intel Edison APIリファレンス

garretlab
mraa_gpio_isr()

名称

mraa_gpio_isr()

説明

GPIOピンに、割り込みハンドラを設定します。入力の変化を検出するエッジトリガ方式です。割り込みハンドラには、引数としてポインタを一つ渡すことができます。

書式

mraa_result_t mraa_gpio_isr(mraa_gpio_context dev, mraa_gpio_edge_t edge, void (*fptr)(void*), void* args);

引数

dev GPIOのコンテキスト。mraa_gpio_init()で作成します。
edge 割り込みを検出するイベント。以下の4つが指定できます。
 MRAA_GPIO_EDGE_NONE:割り込みなし
 MRAA_GPIO_EDGE_BOTH:立ち上がり、立下りの両方
 MRAA_GPIO_EDGE_RISING:立ち上がり
 MRAA_GPIO_EDGE_FALLING:立下り
fptr 割り込みが発生したときに呼び出す関数。
args 割り込みハンドラへの引数。

戻り値

呼出に成功したときは、MRAA_SUCCESSが返却されます。

呼出が失敗したときは、MRAA_SUCCESS以外が返却されます。

使用例

動作確認するだけの、何の意味もない使用例です。printf()がスレッドセーフかどうかもわかっていません…

#include <mraa.h>

void isr(void *arg) {
        printf("Interrupt detected.\n");
        fflush(stdout);
}

int main() {
        mraa_gpio_context pin1, pin2, pin3;
        int i = 0;

        pin1 = mraa_gpio_init(13);
        pin2 = mraa_gpio_init(11);

        mraa_gpio_dir(pin1, MRAA_GPIO_OUT_LOW);
        mraa_gpio_dir(pin2, MRAA_GPIO_IN );

        mraa_gpio_mode(pin1, MRAA_GPIO_STRONG);

        mraa_gpio_isr(pin2, MRAA_GPIO_EDGE_RISING, isr, NULL);

        for (;;) {
                mraa_gpio_write(pin1, 1);
                sleep(1);

                mraa_gpio_write(pin1, 0);
                sleep(1);

                if (i == 5) {
                        mraa_gpio_edge_mode(pin2, MRAA_GPIO_EDGE_BOTH);
                } else if (i == 10) {
                        mraa_gpio_isr_exit(pin2);
                }
                i++;
        }

        return EXIT_SUCCESS;
}

その他

割り込みハンドラを設定すると、スレッド(pthread)がひとつ作成され、そのスレッド内から割り込みハンドラに指定した関数が呼び出されます。

バージョン

MRAA 0.7.3



メニューを表示するためにJavaScriptを有効にしてください。

Intel Edisonで遊ぶページ
Copyright © 2015 garretlab all rights reserved.
inserted by FC2 system