Armadilloフォーラム

ドライバー層からGPIO割込みエッジ設定ができない

shibata5

2018年12月10日 10時13分

はじめまして。

ドライバーを製作中です。
GPIOの立下りエッジの割込みを実現したいと考えています。

以下のAPIを使用しています。割込みは発生しますが、立下りエッジではありません。
立下りエッジの検出設定の仕方を教えていただけませんか。
・request_irq
・irq_set_irq_type

割込み自体は発生します。割込動作は、以下になります。
・HIGHのときは、割込みは発生しません。
・HIGHからLOWに切替えたときに割込みが発生します。
・LOWの間、周期的(周期は計測していません)に割込みが発生します。
・LOWからHIGHに切替えたときに割込みが発生します。
定期的に割込みが発生するため、そのときの割込みかも知れませんが、
必ず、立ち上がり時の割込みログが残っています。

目標は、立下りエッジのみの割込検出です。
もしかしたら、gpiolibが原因かと思っています。何も手を加えていません。
/sys/class/gpio内のedgeの内容は、"none"です。

どなたか、ご教授いただけませんか。
よろしくお願いします。

コメント

hidaka.hiroshi

2018年12月10日 10時25分

> 割込み自体は発生します。割込動作は、以下になります。
> ・HIGHのときは、割込みは発生しません。
> ・HIGHからLOWに切替えたときに割込みが発生します。
> ・LOWの間、周期的(周期は計測していません)に割込みが発生します。
> ・LOWからHIGHに切替えたときに割込みが発生します。
> 定期的に割込みが発生するため、そのときの割込みかも知れませんが、
> 必ず、立ち上がり時の割込みログが残っています。
>
>
> 目標は、立下りエッジのみの割込検出です。
> もしかしたら、gpiolibが原因かと思っています。何も手を加えていません。
> /sys/class/gpio内のedgeの内容は、"none"です。

もしかして、GPIOに入ってくる信号にチャタリングが発生してませんか?
何がGPIOに繋がっているのか判らないので違うかも知れませんが、LOW→HIGHの時
にもチャタリングが発生してそのために割り込みが発生している可能性があります。
一度、オシロスコープ等で波形を確認されてはいかがでしょうか?

shibata5

2018年12月13日 9時30分

ひだか様

大変にありがとうございました。

チャタリングがヒントになりました。
ありがとうございます。

チャタリングではありませんが、ラインがHIGHとLOWを繰り返していました。

IRQに接続しているチップが定期的にリセット(※)するため、その度に、HIGHとLOWを繰り返していました。
それが原因でした。
※データシートには、直接的にHIGHとLOWが切り替わるとは記載されていません。
ブロック図から判断すると、一瞬、LOW→HIGH→LOWになるのではないかと、結論を出しました。

ありがとうございました。