私はARMでLinux割り込みを使用しています。
request_irq()
割り込みを登録するために使用できます。
SHA_SHIRQ
単一の割り込みラインで、複数の割り込みを、つまり通常のIRQに登録できます。
- Linuxは特定の割り込みラインで複数のSA_INTERRUPTを登録できますか?
- つまり、ARM高速割り込みまたは
FIQ
sに対して複数の割り込みハンドラーを登録できますか?
私はARMでLinux割り込みを使用しています。
request_irq()
割り込みを登録するために使用できます。SHA_SHIRQ
単一の割り込みラインで、複数の割り込みを、つまり通常のIRQに登録できます。
FIQ
sに対して複数の割り込みハンドラーを登録できますか?と同様にIRQ
、 にFIQ
はベクター テーブルからのエントリ ポイントが 1 つあります。割り込みコントローラを検査し、ビット/番号に基づいて特定のFIQ
. の場合、両方のルーチンがバンク レジスタを共有する必要があるため、バンク レジスタFIQ
が無効になる傾向があります。1 つのルーチンがバンク レジスタを所有し、他のルーチンがそれらを明示的に保存することが可能です。FIQ
現在のLinux FIQ コードは、複数の同時FIQ
ソースではなく、FIQ ハンドラーのスタックをサポートしています。コードでset_fiq_regs()を使用してレジスタを初期化できますFIQ
。interrupt source
割り込みコントローラーのベース アドレスを割り当て、適切なハンドラーに分岐し て検査するコードを持つことができます。注: 、カーネルは との通信メカニズムを提供しませんFIQ
。独自のインターロックを作成する必要があります。FIFO の実装は、他のロック フリーカーネル パターンFIQ
と同様に安全であるべきだと思います。
編集:FIQ
これはメインラインコード のサンプルです。IMX SSI ドライバーです。
SSI アセンブラ、シンボル インターフェイス、メイン ファイル。 ソフト DMAFIQ
とも呼ばれます。レイテンシーは非常に小さく、高いサービス頻度を可能にするはずです。通常、この注意が必要なデバイスは 1 つだけです。ハンドラーで逆多重化できます (分岐/関数呼び出し/ソース番号のポインター)。aがアセンブラで書かれることが多い理由は、これを使用するとパフォーマンスが暗黙的になるからです。また、通常はマスクされず、レイテンシが増加しますFIQ
FIQ
FIQ
IRQ
システムの残りの部分。アセンブラでコーディングして高速化すると、IRQ
レイテンシが短縮されます。
参照: FIQ-IRQ の違い
同じ IRQ に登録されているすべての割り込みハンドラが一覧に表示されます。割り込みが発生すると、カーネルは各割り込みハンドラーを順番に呼び出します (最後に登録されたものから最初に登録されたものか、最初に登録されたもの — どちらがオフハンドだったかは覚えていません)。この点に関して、FAST_IRQ は特別なものではありません。
ハードウェアをチェックして、何かを処理する必要があるかどうかを確認するのは、各割り込みハンドラの義務です。そうでない場合は、次のハンドラーが見えるように単純に戻ります。