momura
2018年3月6日 18時48分
大村と申します。ご教示をお願いします。
840mを使ってアプリケーションを作成しています。
その中でGPIOポートを複数使って、パラレル通信する必要が出てきました。
他のマイコンのように例えば8ビットまとめて読込むような関数などは
ないでしょうか?
1ビットごとですと、下記のような流れでできると思われます。
fd = open("/sys/class/gpio/gpio97/value" , O_RDWR);
read(fd, buf, 1);
close(fd);
8ビットパラレルデータを上記のように1ビットずつ読んで
ビット演算で処理すればできないことはないですが、非常に時間
がかかりそうです。
処理速度も問題となりそうなので、早く処理できる方法、関数など
ありましたら、お教えください。
よろしくお願い申し上げます。
コメント
momura
御返答、有り難う御座います。
よく分かりました。
とりあえず、1ビットずつ読込んで、どのくらいの速度が出るか
確認してみます。
それで不足だったら、仰るとおり別の方法を考えてみます。
有り難う御座いました。御礼申し上げます。
> > 大村と申します。ご教示をお願いします。
> > 840mを使ってアプリケーションを作成しています。
> > その中でGPIOポートを複数使って、パラレル通信する必要が出てきました。
> > 他のマイコンのように例えば8ビットまとめて読込むような関数などは
> > ないでしょうか?
> > 1ビットごとですと、下記のような流れでできると思われます。
> > fd = open("/sys/class/gpio/gpio97/value" , O_RDWR);
> > read(fd, buf, 1);
> > close(fd);
> >
> > 8ビットパラレルデータを上記のように1ビットずつ読んで
> > ビット演算で処理すればできないことはないですが、非常に時間
> > がかかりそうです。
> > 処理速度も問題となりそうなので、早く処理できる方法、関数など
> > ありましたら、お教えください。
> > よろしくお願い申し上げます。
>
> 速度をどの程度期待されているのか分らないのですが、
> linuxはリアルタイムシステムではないので、パラレル
> インターフェースをGPIOで、それもユーザーランドから
> 制御するのは無理があります。
> デバイスドライバで割り込みで駆動したとしても他の
> デバイスドライバの割り込み禁止区間分に入ると散発的に遅れ
> が生じるので、こちらも数ms単位でズレが出ます。
>
> Armadilloが一方的に受信する用途であれば、カメラのキャプチャに
> 使っているCEUコアを使うデバイスドライバを書くか、
>
> パラレル通信を変換するハードウェアを用意して、
> USBやSDIO等のHW側で送受信制御されるインターフェースを
> 使う方が良いと思います。
at_ohsawa
2018年3月6日 19時10分
> 大村と申します。ご教示をお願いします。
> 840mを使ってアプリケーションを作成しています。
> その中でGPIOポートを複数使って、パラレル通信する必要が出てきました。
> 他のマイコンのように例えば8ビットまとめて読込むような関数などは
> ないでしょうか?
> 1ビットごとですと、下記のような流れでできると思われます。
> fd = open("/sys/class/gpio/gpio97/value" , O_RDWR);
> read(fd, buf, 1);
> close(fd);
>
> 8ビットパラレルデータを上記のように1ビットずつ読んで
> ビット演算で処理すればできないことはないですが、非常に時間
> がかかりそうです。
> 処理速度も問題となりそうなので、早く処理できる方法、関数など
> ありましたら、お教えください。
> よろしくお願い申し上げます。
速度をどの程度期待されているのか分らないのですが、
linuxはリアルタイムシステムではないので、パラレル
インターフェースをGPIOで、それもユーザーランドから
制御するのは無理があります。
デバイスドライバで割り込みで駆動したとしても他の
デバイスドライバの割り込み禁止区間分に入ると散発的に遅れ
が生じるので、こちらも数ms単位でズレが出ます。
Armadilloが一方的に受信する用途であれば、カメラのキャプチャに
使っているCEUコアを使うデバイスドライバを書くか、
パラレル通信を変換するハードウェアを用意して、
USBやSDIO等のHW側で送受信制御されるインターフェースを
使う方が良いと思います。