5

割り込みがどのように機能するかを理解するのに苦労しています。

以下のコードは、プログラマブル割り込みコントローラーを初期化します

  #define PIC0_CTRL 0x20    /* Master PIC control register address. */
  #define PIC0_DATA 0x21    /* Master PIC data register address. */

  /* Mask all interrupts*/
  outb (PIC0_DATA, 0xff);

  /* Initialize master. */
  outb (PIC0_CTRL, 0x11); /* ICW1: single mode, edge triggered, expect ICW4. */
  outb (PIC0_DATA, 0x20); /* ICW2: line IR0...7 -> irq 0x20...0x27. */
  outb (PIC0_DATA, 0x04); /* ICW3: slave PIC on line IR2. */
  outb (PIC0_DATA, 0x01); /* ICW4: 8086 mode, normal EOI, non-buffered. */

  /* Unmask all interrupts. */
  outb (PIC0_DATA, 0x00);

誰かが私にそれがどのように機能するかを説明できますか:

- outb の役割 (Linux の人間がわかりませんでした)

- アドレスとその意味

別の無関係な質問ですが、outb と inb はポート マップ I/O 用であると読みましたが、入出力通信を行うためにメモリ マップ I/O を使用できますか?

ありがとう。

4

3 に答える 3

8

outb()2 番目の引数で指定されたバイトを、最初の引数で指定された I/O ポートに書き込みます。このコンテキストでは、「ポート」は、CPU が別のチップと通信するための手段です。

提示する特定の C コードは、8259A プログラマブル割り込みコントローラー (PIC) に関連しています。

PIC については、ここここで読むことができます。

コマンドとビットマスクを理解するのに十分な詳細が得られない場合は、いつでもチップのデータシートを参照できます。

于 2012-01-22T11:18:13.523 に答える
1

従来の8088/86には、基本的に命令に直接関連付けられた別のアドレスビットであるメモリ制御信号がありました。アクセスをI/Oとメモリに分離し、2つの別個のアドレス空間を作成する制御信号。CS、DSなどとは異なり、チップ内に個別のメモリスペースを作成します(外部メモリスペースに到達する前)。他のプロセッサフ​​ァミリは、メモリマップドI/Oと呼ばれるものを使用します。

最近では、メモリコントローラ/システムは、チップの内外でさまざまな方法で切り刻まれています。たとえば、命令とデータ、キャッシュラインのフィル、ライトスルーとライトバックなどを示す多くの制御信号があります。外部回路を節約するためメモリマッピングはチップ内で行われ、たとえば、RAMとは別の専用ROMインターフェイスがエッジにあり、古い8088/86のI/Oスペースとメモリスペースよりもはるかに複雑で分離されています。

アウトとインの命令と数人の家族は、I / Oアクセスとメモリアクセスのどちらを実行しているかを変更します。従来、割り込みコントローラは、メモリバスをデコードして、そのデバイスに割り当てられたアドレスでI/Oアクセスを探すチップでした。 。数十年後の下位互換性により、現在のコードを確認できます。

それを本当に理解したい場合は、割り込みコントローラーを含むデバイスのデータシートを見つける必要があります。これは、大きなサポートチップ上の他のロジックと組み合わせることができます。他のデータシートも必要になる場合があります。

于 2012-01-22T14:51:42.620 に答える
1

デバイス固有のコードは、対応するデータシートと併せて読むのが最適です。たとえば、「8259A Programmable Interrupt Controller」データシート (http://pdos.csail.mit.edu/6.828/2005/readings/hardware/8259A.pdf) では、ほぼすべてが明確に (ただし簡潔に) 説明されています。

ただし、このデータシートでは、チップの使用方法 (任意のシステム) についてのみ説明し、特定のシステム (「PC 互換」80x86 システムなど) でのチップの使用方法については説明しません。そのためには、「暗黙の事実上の標準」に依存する必要があります (PIC チップの多くの機能は「PC 互換」の 80x86 システムでは使用されておらず、最新の統合チップセットではサポートされていない可能性があるため)。

通常、(歴史的な理由から) PIC チップの IRQ は、奇妙な/悪い方法で割り込みにマップされます。たとえば、IRQ 0 は割り込み 8 にマップされ、CPU の二重障害例外と競合します。あなたが投稿した特定のコードは、IRQ0が割り込み0x20にマップされるようにPICチップを再マップします(およびIRQ1は割り込み0x21にマップされます...、IRQ 15はIRQ 0x2Fにマップされます)。これは、競合を回避するために OS が通常行うことです (たとえば、各割り込みが IRQ または例外に使用され、両方には使用されないようにします)。

「outb()」を理解するには、Intel のマニュアルの「OUT」命令を参照してください。2 つのアドレス空間があるようです。1 つは通常の物理アドレス用で、もう 1 つは IO ポート用で、通常の命令が (間接的に) 通常の物理メモリにアクセスします。また、IO ポート命令 (IN、OUT、INSB/W/D、OUTSB/W/D) は、別の「IO アドレス空間」にアクセスします。

于 2012-01-22T11:32:29.483 に答える