Armadilloフォーラム

Armadillo610でのGPIO割り込み

otokuni_aoi

2024年4月12日 11時14分

Armadillo610上で、GPIO割り込みさせようとしていますが、
うまく動いておらず、ご教授いただけないでしょうか。
・CON20-40/CON4-17ピン
・CON20-13/CON4-18ピン
の2つのGPIO信号の立ち下がりエッジで、割込みさせたいと思っています。

フォーラムでの議論を参考にして、
Aramdillo400シリーズソフトウェアマニュアルv1.4.1の9.9節の
サンプルコードを参考にしようとしていますが、不明点がございます。
https://armadillo.atmark-techno.com/forum/armadillo/1441

①サンプルではArmadillo400の"CON9_1"ピンを対象にしていますが、
 Aramdillo610の場合のピン指定は、例えば、
 "/sys/class/gpio/CON4_17/"などと記載したらよいのでしょうか。
 もしくは"/sys/class/gpio/CON20_40/"などと記載したらよいのでしょうか。

②gpioset/gpiogetコマンドで、CON20_40(GPIO1_IO01)の値を変更できることは確認しましたが、
 CON20_13(GPIO3_IO05)はoutput設定になっているため、値が変更できません。
 gpioinfoで確認すると、output設定になっており、これが原因かと思っています。
 これをinput設定に変更するためには、サンプルコードの
 Write(fd, "in", 2);
 のところで、出力方向を変更できると思っているのですが、
 デバイスツリーファイルの方でも、なにか設定が必要でしょうか。
 なお、当該GPIOには、別機能は割り振っておりません。

③Armadillo610でのGPIO割り込みのサンプルコードがございましたら、
 いただけないでしょうか。

以上、よろしくお願いいたします。

コメント

at_akihito.irie

2024年4月15日 10時56分

入江です。

> ①サンプルではArmadillo400の"CON9_1"ピンを対象にしていますが、
>  Aramdillo610の場合のピン指定は、例えば、
>  "/sys/class/gpio/CON4_17/"などと記載したらよいのでしょうか。
>  もしくは"/sys/class/gpio/CON20_40/"などと記載したらよいのでしょうか。

sysfs経由でGPIOの設定を変更することは現在非推奨となっております。
Armadillo-400シリーズの時代の方法は参考にせずに、基本的にはlibgpiodをご使用ください。

> ②gpioset/gpiogetコマンドで、CON20_40(GPIO1_IO01)の値を変更できることは確認しましたが、
>  CON20_13(GPIO3_IO05)はoutput設定になっているため、値が変更できません。
>  gpioinfoで確認すると、output設定になっており、これが原因かと思っています。
>  これをinput設定に変更するためには、サンプルコードの
>  Write(fd, "in", 2);
>  のところで、出力方向を変更できると思っているのですが、
>  デバイスツリーファイルの方でも、なにか設定が必要でしょうか。
>  なお、当該GPIOには、別機能は割り振っておりません。

Armadilloを再起動しても初めからoutputになっていますか?
また、device treeは何を使用されていますか?

> ③Armadillo610でのGPIO割り込みのサンプルコードがございましたら、
>  いただけないでしょうか。

以下はlibgpiodを使用したシェルスクリプトの例です。
厳密にはポーリングで割り込みイベントを待っている点にご留意ください。

#!/bin/sh
 
while true; do
        gpiomon -f -s -n 1 gpiochip0 1
        echo "OK"
done

echo "OK"としている箇所を書き換えることで、任意の処理を行えます。

libgpiodはC言語やPythonなどでも使用可能ですので、場合によってはそれらの使用もご検討ください。