GPIOピンベースの割り込みハンドラー(上半分)で使用される「returnIRQ_HANDLED」ステートメントとGPIOピンハードウェアの間の相互作用をよりよく理解しようとしています。特に、デバイスがGPIOピンをLowにプルして、注意が必要であることを示すという仮定の状況を考えてみてください。これにより、関連する(上半分の)割り込みハンドラが呼び出されます。ここで、上半分のハンドラーが作業をキューに入れてから「return IRQ_HANDLED」で戻ると仮定しますが、何らかの理由で、割り込みを生成したデバイスで割り込みがクリアされていない(つまり、デバイスがGPIOピンをロー状態に保持している) )。「returnIRQ_HANDLED」を呼び出すと、割り込みが再生成されますか?私は次の記事の文脈でこれを尋ねます:
http://www.makelinux.net/books/lkd2/ch06lev1sec4
「再入可能および割り込みハンドラーLinuxの割り込みハンドラーは再入可能である必要はありません。特定の割り込みハンドラーが実行されている場合、対応する割り込みラインはすべてのプロセッサーでマスクされ、同じライン上の別の割り込みが受信されないようにします。通常、他のすべての割り込みは有効になります。 、したがって、他の割り込みは処理されますが、現在の行は常に無効になります。その結果、ネストされた割り込みを処理するために同じ割り込みハンドラが同時に呼び出されることはありません。これにより、割り込みハンドラの記述が大幅に簡素化されます。」
上記のコメントは、割り込みハンドラーの呼び出し時に、その割り込みの割り込みラインがマスクされることを示しています。「returnIRQ_HANDLED」の呼び出しが割り込みラインのマスクを解除するものであるかどうかを理解しようとしています。そして、上記の仮定のケースに関して、「IRQ_HANDLEDを返す」が、デバイスが実際には割り込みをクリアしておらず、GPIOピンをロー(トリガー)状態に保持している場合はどうなりますか。より具体的には、これにより、割り込みが再度生成され、割り込みが最初に発生したときにプロセッサがキューに入れられた作業を実行する機会がなくなります。つまり、これは割り込みストームにつながり、プロセッサが際限なく中断される可能性があるため、有用な処理を実行できなくなります。
前もって感謝します、
ジム
PS:割り込み(特に、特定のGPIOピンに関連付けられた割り込み)を有効/無効にすることと、同じGPIO割り込みをマスク/マスク解除することの違いについてはわかりません。