
Intel 8253と8254は、3つの16ビットカウンタを使用してタイミングとカウント機能を実行するプログラマブルインターバルタイマー(PIT)です。 [ 1 ]
825xファミリーは主にIntel 8080/8085プロセッサ向けに設計されましたが、後にx86互換システムでも使用されるようになりました。825xチップ、またはより大きなチップに組み込まれた同等の回路は、すべてのIBM PC互換機やVector-06Cなどのソ連製コンピュータに搭載されています。
PC互換機では、タイマーチャンネル0はIRQ -0(最優先ハードウェア割り込み)に割り当てられます。タイマーチャンネル1はDRAMリフレッシュに割り当てられます(少なくとも80386以前の初期モデルでは)。タイマーチャンネル2はPCスピーカーに割り当てられます。
Intel 82c54(cはCMOSロジックを表す)バリアントは、最大10MHz のクロック信号を処理できます。[ 1 ]
8253は、1980年版インテル「コンポーネントデータカタログ」に記載されている。8254は、クロック速度が向上した8253の上位互換として説明されており、1982年版インテル「コンポーネントデータカタログ」に「暫定版」データシートが掲載されている。
8254はHMOSで実装されており、8253にはない「Read Back」コマンドを備え、同じカウンタの読み書きをインターリーブすることができます。[ 2 ]
現代の PC 互換機は、SoC CPU またはサウスブリッジを使用する場合、通常、下位互換性と相互運用性のために完全な 8254 互換性を実装しています。[ 3 ]リードバックコマンドは、マルチコア CPU および GPU との相互運用性のための重要な I/O 機能です。
Intel M8253 の軍用バージョンは、動作温度範囲が -55 °C ~ +125 °C で、5V の電源許容誤差が ±10% です。[ 4 ]入手可能な 82C53 CMOS バージョンは、沖電子工業株式会社に委託されました。[ 5 ] Intel 82C54 の入手可能なパッケージ バージョンは、1986 年第 1 四半期にサンプルされた28 ピンPLCCでした。 [ 6 ]

タイマーには、0から2までの番号が振られた3つのカウンターがあります。[ 7 ]各チャンネルは、6つのモードのいずれかで動作するようにプログラムできます。一度プログラムすると、チャンネルは独立して動作します。[ 1 ]
各カウンタには、2 つの入力ピン (「CLK」(クロック入力) と「GATE」) と、データ出力用の 1 つのピン (「OUT」) があります。3 つのカウンタはそれぞれ独立した 16 ビットダウンカウンタであり、CPUで簡単に読み取ることができます。[ 8 ]
PITの動作モードは、上記のハードウェア信号を設定することで変更されます。例えば、制御ワードレジスタに書き込むには、CS =0、RD =1、WR =0、A1=A0=1に設定する必要があります。
カウンタを初期化するには、マイクロプロセッサはこのレジスタに制御ワード(CW)を書き込む必要があります。これは、読み書きロジックブロックのピンに適切な値を設定し、その後、制御ワードをデータ/バスバッファブロックに送信することで実行できます。
制御ワードレジスタは、D7~D0(D7が最上位ビット)の8ビットで構成されています。デコードはやや複雑です。ほとんどの値は、3つのカウンタのうちの1つのパラメータを設定します。
しかし、他にも2つの形態がある。
PITを設定する際、マイクロプロセッサはまず制御メッセージを送信し、次にカウントメッセージをPITに送信します。カウント処理は、PITがこれらのメッセージを受信した後、場合によってはGATE入力信号の立ち上がりエッジを検出した後に開始されます。ステータスバイト形式。ビット7は、ソフトウェアがOUTピンの現在の状態を監視できるようにします。ビット6は、カウントが読み取れるタイミングを示します。このビットが1の場合、カウント要素はまだロードされておらず、プロセッサによって読み取ることができません。ビット5から0は、制御レジスタに書き込まれた最後のビットと同じです。
制御ワードのD3、D2、D1ビットは、タイマーの動作モードを設定します。モードは全部で6種類あり、モード2と3ではD3ビットは無視されるため、欠落しているモード6と7はモード2と3の別名です。
すべてのモードはGATE入力に敏感であり、GATEがハイの場合は正常動作となるが、GATEがローの場合の影響はモードによって異なる。
モード0は、ソフトウェア制御による正確な時間遅延を生成するために使用されます。このモードでは、カウンタは初期値としてロードされたCOUNT値から0までカウントを開始します。カウントレートは入力クロック周波数と同じです。
コントロールワードが書き込まれると、OUTピンはローに設定され、COUNTがプログラムされてから1クロックサイクル後にカウントが開始されます。カウンタが0に達するまでOUTはローのままで、0に達すると、カウンタが再ロードされるかコントロールワードが書き込まれるまでOUTはハイに設定されます。カウンタは0xFFFF内部でラップアラウンドしてカウントを継続しますが、OUTピンはその後変化しません。通常のカウントでは、Gate信号はアクティブハイのままである必要があります。Gateがローになるとカウントは中断され、再びハイになると再開されます。
新しいカウントの最初のバイトがカウントレジスタにロードされると、以前のカウントが停止します。
このモードでは、8253を単安定マルチバイブレータとして使用できます。GATE入力はトリガー入力として使用されます。
OUTは初期状態ではハイレベルです。トリガー後のクロックパルスでOUTはローレベルになり、ワンショットパルスが開始されます。その後、カウンタがゼロになるまでローレベルのままです。次にOUTはハイレベルになり、次のトリガー後のクロックパルスまでハイレベルのままです。
制御ワードと初期カウントを書き込むと、カウンタが作動状態になります。トリガーが発生すると、カウンタがロードされ、次のCLKパルスでOUTがローレベルに設定され、ワンショットパルスが開始されます。初期カウントがNの場合、N CLKサイクル分のワンショットパルスが生成されます。
ワンショットは再トリガー可能であるため、トリガー後、OUTはNクロックパルスの間ローレベルを維持します。ワンショットパルスは、同じカウントをカウンタに書き込むことなく繰り返すことができます。GATEはOUTに影響を与えません。ワンショットパルス中にカウンタに新しいカウントが書き込まれた場合、カウンタが再トリガーされない限り、現在のワンショットは影響を受けません。再トリガーされた場合は、カウンタに新しいカウントがロードされ、新しいカウントが終了するまでワンショットパルスが継続します。
このモードでは、デバイスはn分周カウンタとして動作し、これはリアルタイムクロック割り込みを生成するためによく使用されます。
他のモードと同様に、カウント処理はCOUNT信号が送信された次のクロックサイクルから開始されます。その後、カウンタが1に達するまでOUT信号はハイレベルを維持し、1クロックパルスの間ローレベルになります。次のサイクルでカウントが再ロードされ、OUT信号が再びハイレベルになり、このプロセス全体が繰り返されます。
ハイパルス間の時間は、カウンタのレジスタにプリセットされたカウント値によって決まり、次の式を使用して計算されます。
カウンターにロードする値 =
COUNTレジスタの値の範囲は、1に切り替わります。レジスタは決してゼロになりません。
このモードはモード2と似ています。ただし、出力のハイクロックパルスとロークロックパルスの持続時間はモード2とは異なります。
仮定するカウンターにロードされた数値(COUNTメッセージ)の場合、出力は高くなります。カウント数、そして低いカウントします。したがって、期間はカウントされ、もし奇妙なことに、余分な半サイクルはOUTハイで費やされます。
コントロールワードとCOUNTがロードされると、カウンタがゼロになるまで出力はハイレベルを維持します。その後、カウンタは1クロックサイクルの間、ローレベルのパルス(ストローブ)を生成し、その後出力は再びハイレベルに戻ります。
GATEがローになるとカウントが中断され、GATEが再びハイになるとカウントが再開されます。
このモードはモード4と似ています。ただし、カウント処理はGATE入力によってトリガーされます。
コントロールワードとCOUNTを受信すると、出力はハイレベルになります。デバイスはGATE入力の立ち上がりエッジを検出すると、カウントを開始します。カウンタが0に達すると、出力は1クロックサイクルの間ローレベルになり、その後再びハイレベルに戻って、GATEの次の立ち上がりエッジでサイクルを繰り返します。
8253は、1981年の登場以来、IBM PC互換機で使用されていました。[ 9 ]現代では、このPITはx86 PCに独立したチップとして含まれていません。むしろ、その機能はマザーボードチップセットのサウスブリッジの一部として含まれています。最新のチップセットでは、この変更により、x86 I/Oアドレス空間のPITレジスタへのアクセスが著しく高速化される可能性があります。
すべての PC 互換機は、PIT を105/88 = 1.193 18 MHzのクロックレートで動作させます。これは、システム クロック (14.31818 MHz) を 12 で割った NTSC カラー バースト周波数の1/3です。これは、最初のCGA PCの名残です。最初の CGA PC は、必要な周波数をすべて単一の水晶発振器から生成し、テレビ出力を可能にするために、この発振器を NTSC カラー サブキャリア周波数の倍数で動作させる必要がありました。この周波数を 2 16 (8253 が可能な最大の除数) で割ると、 MS-DOSおよび関連するオペレーティングシステムで使用される≈18.2 Hz のタイマー割り込みが生成されます。
初期のIBM PCでは、カウンタ0は時刻同期割り込みを生成するために使用されます。カウンタ1はDRAMメモリのリフレッシュをトリガーするために使用されます。カウンタ2はPCスピーカーを介して音を生成するために使用されます。
最新のマザーボードには、 Advanced Configuration and Power Interface (ACPI)を介した追加のカウンタ、ローカル Advanced Programmable Interrupt Controller上のカウンタ、および高精度イベントタイマーが搭載されています。CPU 自体にもタイムスタンプカウンタ機能が備わっています。
PCでは、タイマー0(チップ)のアドレスはポート40h~43h、2番目のタイマー1(チップ)のアドレスは50h~53hです。
x86 PCでは、多くのビデオカードBIOSとシステムBIOSが、セカンドカウンタを独自の用途に合わせて再プログラムします。再プログラムは通常、ビデオモードの変更時(ビデオBIOSが実行される場合)と、システム管理モードや省電力状態の変更時(システムBIOSが実行される場合)に発生します。これにより、多くのx86システムでは、タイマーのセカンドカウンタを他の用途に本格的に使用することはできなくなります。
前述のとおり、チャネル 0 はカウンタとして実装されています。通常、カウンタの初期値は、コントロール レジスタ、次にデータ I/O ポート レジスタにバイトを送信することによって設定されます (値 36h をポート 43h に送信し、次に下位バイトをポート 40h に送信し、上位バイトを再びポート 40h に送信します)。カウンタはゼロまでカウントダウンし、 CPUにハードウェア割り込み(IRQ 0、INT 8)を送信します。その後、カウンタは初期値にリセットされ、再びカウントダウンを開始します。可能な最速の割り込み周波数は、0.5 メガヘルツ強です。可能な最遅の周波数は、MS-DOSまたは互換オペレーティングシステムを実行しているコンピュータで通常使用される周波数でもあり、約 18.2 Hz です。これらのリアル モードオペレーティングシステムでは、BIOS は、受信した INT 8 呼び出しの数をリアル モード アドレス 0040:006c に蓄積し、プログラムで読み取ることができます。
タイマーがカウントダウンする際、その値はI/Oポートを2回読み取ることで直接読み取ることができます。まず下位バイトを、次に上位バイトを読み取ります。ただし、x86 PCなどのフリーランニングカウンタアプリケーションでは、読み取った2つのバイトが同じ値に属するように、まず目的のチャネルのラッチコマンドを制御レジスタに書き込む必要があります。
2002年のマイクロソフトの文書によると、「このハードウェア[8254]からの読み書きにはIOポートを介した通信が必要なため、プログラミングには数サイクルかかり、OSにとって非常にコストがかかる。そのため、非周期機能は実際には使用されていない。」[ 10 ]