私はARMでLinux割り込みを使用しています。
request_irq()割り込みを登録するために使用できます。
SHA_SHIRQ単一の割り込みラインで、複数の割り込みを、つまり通常のIRQに登録できます。
- Linuxは特定の割り込みラインで複数のSA_INTERRUPTを登録できますか?
- つまり、ARM高速割り込みまたは
FIQsに対して複数の割り込みハンドラーを登録できますか?
私はARMでLinux割り込みを使用しています。
request_irq()割り込みを登録するために使用できます。SHA_SHIRQ単一の割り込みラインで、複数の割り込みを、つまり通常のIRQに登録できます。
FIQsに対して複数の割り込みハンドラーを登録できますか?と同様に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がアセンブラで書かれることが多い理由は、これを使用するとパフォーマンスが暗黙的になるからです。また、通常はマスクされず、レイテンシが増加しますFIQFIQFIQIRQ システムの残りの部分。アセンブラでコーディングして高速化すると、IRQ レイテンシが短縮されます。
参照: FIQ-IRQ の違い
同じ IRQ に登録されているすべての割り込みハンドラが一覧に表示されます。割り込みが発生すると、カーネルは各割り込みハンドラーを順番に呼び出します (最後に登録されたものから最初に登録されたものか、最初に登録されたもの — どちらがオフハンドだったかは覚えていません)。この点に関して、FAST_IRQ は特別なものではありません。
ハードウェアをチェックして、何かを処理する必要があるかどうかを確認するのは、各割り込みハンドラの義務です。そうでない場合は、次のハンドラーが見えるように単純に戻ります。