Armadilloフォーラム

デジタル入力からの割り込み処理

kumikoohashi

2019年2月21日 18時27分

いつもお世話になっております。大橋です。

Armadillo-IoT G3に絶縁デジタル入出力/アナログ入力アドオンモジュール DA00を載せて(右側に)、デジタル入力から割り込みの処理をしようとしています。
ケーブルはマニュアルで言う5,6番に挿しています。

まずこのページを見て、
https://users.atmark-techno.com/blog/750/2713
リンクのあった400用のサンプルコードをそのまま、
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_sof…
指示の通りに以下のところだけG3用に変更しました。

#define GPIO_DIR "/sys/class/gpio"
#define GPIO_NAME "gpio141"
#define GPIO_PATH GPIO_DIR "/" GPIO_NAME "/"

pfd.events = POLLPRI | POLLERR;

しかし実行するとwaiting for interrupt...で止まり、何度ケーブルの状態を変えても反応がありません。
入力専用ですしdirectionディレクトリも存在しないものの、そこは通過しているのでそのままです。

5、6番に差し込んだケーブルを繋いだり切断したりすると
cat /sys/class/gpio/gpio141/value
の結果が1と0で変化することは確認しましたが、他にもソースコードを変えるところがあるのでしょうか。

いつも初歩的な質問で申し訳ありませんが、どなたかご教授いただけますと幸いです。
宜しくお願いいたします。

コメント

中村です。

> しかし実行するとwaiting for interrupt...で止まり、何度ケーブルの状態を変えても反応がありません。

この実行はroot権限でやっていますか?

-rw-r--r-- 1 root root 4096 Feb 21 19:33 active_low
lrwxrwxrwx 1 root root    0 Feb 21 19:33 device -> ../../../gpiochip5
-rw-r--r-- 1 root root 4096 Feb 21 19:33 edge
drwxr-xr-x 2 root root    0 Feb 21 19:33 power
lrwxrwxrwx 1 root root    0 Feb 21 19:33 subsystem -> ../../../../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Feb 21 19:33 uevent
-rw-r--r-- 1 root root 4096 Feb 21 19:33 value

デフォルトではこのようになていて、
atmarkなど一般ユーザは読めますが、書けません。

    fd = open(GPIO_PATH "edge", O_RDWR);                                 1
    write(fd, "falling", 7);
    close(fd);

でエラーになっているのではないかと思います。
次のようにエラーチェックしてみてください。

    fd = open(GPIO_PATH "edge", O_RDWR);
    if (fd < 0) {
        perror(GPIO_PATH "edge");
        exit(1);
    }
    write(fd, "falling", 7);

--
なかむら

中村様

お世話になっております。
一般ユーザーでした。rootで実行したところ動きました。
いつも初歩的な質問に答えてくださって、ありがとうございます。