78

ARM926EJ などのマイクロプロセッサの FIQ 割り込みシステムと IRQ 割り込みシステムの違いを知りたいです。

4

11 に答える 11

167

ARMは高速割り込みを呼び出しますがFIQこれIRQ通常の優先順位です。実際のシステムでは、2つのデバイスよりもはるかに多くの割り込みソースが存在するため、これらの複数のソースのマスキング、優先順位付けなどを可能にし、割り込み要求ラインをプロセッサに駆動する外部ハードウェア割り込みコントローラがあります。

ある程度、これにより2つの割り込みモードの区別が冗長になり、多くのシステムはまったく使用しないか、他のプロセッサで見られるnFIQマスク不可()割り込みと同様の方法で使用します(ただし、ほとんどのARMではソフトウェアでマスク可能です)。プロセッサ)。NMIFIQ

では、なぜARMはFIQを「高速」と呼ぶのでしょうか。

  1. FIQモードには、専用のバンクレジスタがありr8-r14ます。R14は、FIQからのリターンアドレス(+4)を保持するリンクレジスタです。ただし、FIQハンドラーがを使用するように記述できる場合はr8-r13、次の2つの方法でこれらのバンクレジスターを利用できます。
    • 1つは、割り込みサービスルーチン(ISR)で使用されるレジスタをプッシュおよびポップするオーバーヘッドが発生しないことです。これにより、ISRへの入口と出口の両方でかなりの数のサイクルを節約できます。
    • また、ハンドラーは、ある呼び出しから次の呼び出しまでレジスターに保持される値に依存できるため、たとえばハードウェアデバイスへのポインターとして使用でき、ハンドラーは次に呼び出されるときにr8同じ値に依存できます。r8
  2. 例外ベクトルテーブルの最後にあるFIQの場所(0x1C)は、FIQハンドラーコードがベクトルテーブルの最後に直接配置されている場合、分岐は必要ないことを意味します。コードはから直接実行できます0x1C。これにより、ISRへのエントリの数サイクルが節約されます。
  3. FIQはIRQよりも優先されます。これは、コアがFIQ例外を受け取ると、自動的にIRQをマスクアウトすることを意味します。IRQはFIQハンドラーに割り込むことはできません。逆は当てはまりません。IRQはFIQをマスクしないため、FIQハンドラー(使用されている場合)がIRQに割り込む可能性があります。さらに、IRQ要求とFIQ要求の両方が同時に発生した場合、コアは最初にFIQを処理します。

では、なぜ多くのシステムがFIQを使用しないのでしょうか。

  1. FIQハンドラーコードは通常、Cで記述することはできません。アセンブリ言語で直接記述する必要があります。FIQを使用するためにISRのパフォーマンスを十分に気にしている場合は、どのような場合でもCでコーディングしてテーブルに数サイクルを残したくないでしょうが、さらに重要なことに、Cコンパイラは次の制限に従うコードを生成しません。レジスタのみを使用しますr8-r13ATPCSARMのプロシージャコール標準に準拠したCコンパイラによって生成されたコードは、代わりにスクラッチ値のレジスタを使用し、関数の最後に正しい復元リターンコードをr0-r3生成しません。cpsr
  2. すべての割り込みコントローラーハードウェアは通常、IRQピン上にあります。FIQの使用は、nFIQ入力に接続された単一の最高優先度の割り込みソースがあり、多くのシステムに単一の永続的に最高優先度のソースがない場合にのみ意味があります。複数のソースをFIQに接続し、ソフトウェアにそれらの間で優先順位を付けることには価値がありません。これにより、FIQがIRQに対して持つほとんどすべての利点が失われるためです。
于 2013-01-08T09:50:09.853 に答える
64

最新の ARM CPU (およびその他のいくつか) の機能。

特許から:

複数の割り込みを処理する能力を有するデジタルデータプロセッサにおいて高速割り込みを実行する方法が提供される。高速割り込み要求が受信されると、フラグが設定され、プログラム カウンターと条件コード レジスタがスタックに格納されます。割り込み処理ルーチンの最後に、割り込み命令からのリターンは、デジタル データ プロセッサのステータスを含む条件コード レジスタを取得し、フラグが設定されているかどうかを確認します。フラグが設定されている場合は、高速割り込みが処理されたことを示しているため、プログラム カウンターのみがアンスタックされます。

つまり、FIQ は優先度の高い割り込み要求であり、要求処理中に IRQ およびその他の FIQ ハンドラーを無効にすることによって優先順位が付けられます。したがって、アクティブな FIQ 割り込みの処理中に他の割り込みが発生することはありません。

于 2009-06-19T04:58:03.810 に答える
6

Chaos はすでに適切に回答していますが、これまでカバーされていない追加のポイントは、FIQ がベクター テーブルの最後にあるため、ルーチンをすぐに開始するのが一般的/伝統的であるのに対し、IRQ ベクターは通常それだけです。(つまり、別の場所へのジャンプ)。完全な stash とコンテキストの切り替えの直後にその余分なブランチを回避すると、速度がわずかに向上します。

于 2009-06-24T14:38:05.613 に答える
5

もう 1 つの理由は、FIQ の場合、スタックにプッシュするために必要なレジスタの数が少ないためです。FIQ モードには R8 ~ R14_fiq レジスタがあります。

于 2010-06-23T16:46:22.813 に答える
3

FIQ は優先度が高く、別の IRQ が処理されている間に導入できます。最も重要なリソースは FIQ によって処理され、残りは IRQ によって処理されます。

于 2009-06-19T04:56:49.663 に答える
1

これがあなたが探しているものだと思います:

http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.arm/2005-09/msg00084.html

基本的に、FIQ は優先度の低い複数の IRQ ソースで最も優先度が高くなります。

于 2009-06-23T14:39:02.577 に答える
1

FIQ は優先度が高いことは間違いありません。残りのポイントはわかりません..... FIQ は高速データ転送 (または) チャネル処理をサポートします。高速データ処理が必要な場合は、FIQ を使用し、通常は IRQ を使用します 通常の割り込み処理.

于 2010-11-16T11:53:37.283 に答える
0

FIQ についての魔法はありません。FIQ は、提供されている他の IRQ を中断することができます。これが「高速」と呼ばれる理由です。システムはこれらの割り込みでより速く反応しますが、残りは同じです。

于 2011-07-05T14:23:34.907 に答える
0

FIQは最終的に1つの分岐命令を必要としない可能性があるため、割り込みハンドラーの設計方法によって異なります。また、r8-r14レジスタの一意のセットがあるため、次回FIQ割り込みに戻ったときにプッシュ/ポップアップする必要はありません。スタック。もちろん、いくつかのサイクルを節約できますが、1 つの FIQ を提供するハンドラーを増やすことは賢明ではありません。FIQ の優先度は高くなりますが、IRQ/FIQ の両方が同じ CPU 周波数で実行され、割り込みをより高速に処理すると言う理由にはなりません。したがって、それらは同じ速度で実行されている必要があります。

于 2012-12-21T15:05:31.743 に答える
-5

これは間違っているかもしれません。私が知っているのは、FIQがFast Interrupt Requestの略で、IRQがInterrupt Requestの略であることだけです。これらの名前から判断すると、FIQ は IRQ よりも高速に処理 (スロー) されると思います。おそらく、FIQ が IRQ よりも速くプロセスを中断するプロセッサの設計と関係があります。間違っていたら申し訳ありませんが、私は通常、より高いレベルのプログラミングを行っています。

于 2009-06-19T04:50:34.413 に答える