
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(CMOSロジックのc)バリアントは最大10MHzのクロック信号を処理します。[1]
歴史
8253 は、1980 年の Intel「コンポーネント データ カタログ」出版物に記載されています。8253 のスーパーセットとして説明されている 8254 は、クロック速度定格が高く、1982 年の Intel「コンポーネント データ カタログ」に「暫定」データ シートが掲載されています。
8254はHMOSで実装されており、8253では利用できない「リードバック」コマンドがあり、同じカウンターの読み取りと書き込みをインターリーブすることができます。[2]
現代のPC互換機は、 SoC CPUを使用する場合でもサウスブリッジを使用する場合でも、下位互換性と相互運用性のために完全な8254互換性を実装するのが一般的です。[3] Read Backコマンドは、マルチコアCPUおよびGPUとの相互運用性にとって重要なI/O機能です。
バリエーション
Intel M8253には、-55℃~+125℃の温度範囲で動作し、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]
- データ バス バッファには、マイクロプロセッサと内部レジスタ間のデータ バスをバッファリングするロジックが含まれています。8 つの入力ピンがあり、通常は D7..D0 とラベル付けされています (D7 は MSB )。
- 読み取り/書き込みロジックには 5 つのピンがあり、以下にリストされています。「X」は、X がアクティブ ロー信号であることを示します。
- RD : 読み取り信号
- WR : 書き込み信号
- CS : チップセレクト信号
- A0、A1:アドレス行
PIT の動作モードは、上記のハードウェア信号を設定することによって変更されます。たとえば、制御ワード レジスタに書き込むには、CS =0、RD =1、WR =0、A1=A0=1 に設定する必要があります。
- 制御ワード レジスタには、(マイクロプロセッサによって) デバイスに送信されるプログラムされた情報が含まれています。これは、PIT の各チャネルが論理的にどのように動作するかを定義します。これらのポートへのアクセスには、それぞれ約 1 μs かかります。
カウンタを初期化するには、マイクロプロセッサがこのレジスタに制御ワード (CW) を書き込む必要があります。これは、読み取り/書き込みロジック ブロックのピンに適切な値を設定し、制御ワードをデータ/バス バッファ ブロックに送信することで実行できます。
制御ワード レジスタには、D7..D0 (D7 がMSB ) というラベルの付いた 8 ビットが含まれます。デコードは多少複雑です。ほとんどの値は、3 つのカウンターのいずれかのパラメーターを設定します。
- 最上位 2 ビット (11 以外の場合) は、コマンドが適用されるカウンター レジスタを選択します。
- 次の 2 ビット (00 でない場合) は、カウンタ レジスタへの後続の読み取り/書き込みアクセスに使用される形式を選択します。これは通常、最下位バイトと最上位バイトの間でアクセスが交互に行われるモードに設定されます。8253 と 8254 の違いの 1 つは、前者には読み取りと書き込みの両方に影響する 1 つの内部ビットがあるため、形式が 2 バイトに設定されている場合、lsbyte を読み取ると、その後の書き込みが msbyte に向けられることです。8254 では、読み取りと書き込みに別々のビットが使用されました。
- 次の 3 ビットは、カウンターが動作するモードを選択します。
- 最下位ビットは、カウンターがバイナリで動作するか、BCDで動作するかを選択します。(BCD カウントはほとんど使用されないため、エミュレーターやサウスブリッジでは適切に実装されない可能性があります。)
ただし、他に 2 つの形式があります。
- 指定されたタイマーのカウントをラッチします。次の読み取りでは、読み取りの時点でのカウンター値を返すのではなく、ラッチ コマンドの時点でのカウンター値を返します。読み取りが完了すると、その後の読み取りでは現在のカウンターが返されます。ラッチ コマンドを使用すると、モードと BCD ステータスは変更されません。
- (8254 のみ) 複数のタイマーのステータスやカウントをラッチします。これにより、ビットマップを使用して複数の同時ラッチ コマンドが可能になります。また、カウントに加えて、現在のチャネル構成も読み戻すことができます。
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 および 4: GATE が低い間はカウントが中断され、GATE が高い間はカウントが再開されます。
- モード 1 および 5: GATE の立ち上がりエッジでカウントが開始されます。GATE はカウントに影響を与えずに低くなる場合がありますが、別の立ち上がりエッジでカウントが最初から再開されます。
- モード 2 および 3: GATE がローになると、OUT は直ちにハイになり (クロック パルスを待たずに)、カウンターがリセットされます (次のクロックの立ち下がりエッジで)。GATE が再びハイになると、カウントが最初から再開されます。
モード0 (000): ターミナルカウントの割り込み
モード 0 は、ソフトウェア制御による正確な時間遅延の生成に使用されます。このモードでは、カウンターはロードされた初期 COUNT 値から 0 までカウントを開始します。カウント レートは入力クロック周波数と同じです。
制御ワードが書き込まれた後、OUT ピンはローに設定され、COUNT がプログラムされてから 1 クロック サイクル後にカウントが開始されます。カウンタが 0 に達するまで OUT はローのままで、カウンタが再ロードされるか制御ワードが書き込まれるまで OUT はハイに設定されます。カウンタは0xFFFF内部でラップアラウンドしてカウントを続けますが、OUT ピンは再び変化しません。通常のカウントでは、ゲート信号はアクティブ ハイのままである必要があります。ゲートがローになると、カウントは一時停止され、再びハイになると再開されます。
新しいカウントの最初のバイトがカウント レジスタにロードされると、前のカウントが停止します。
モード1(001):プログラム可能なワンショット
このモードでは、8253 を単安定マルチバイブレータとして使用できます。GATE 入力はトリガー入力として使用されます。
OUT は最初はハイです。OUT は、ワンショット パルスを開始するトリガーに続くクロック パルスでローになり、カウンターがゼロに達するまでローのままです。その後、OUT はハイになり、次のトリガー後の CLK パルスまでハイのままです。
制御ワードと初期カウントを書き込んだ後、カウンターが準備されます。トリガーによりカウンターがロードされ、次の CLK パルスで OUT がローに設定され、ワンショット パルスが開始されます。初期カウントが N の場合、ワンショット パルスの持続時間は N CLK サイクルになります。
ワンショットは再トリガー可能であるため、トリガー後、OUT は N CLK パルスの間ローのままになります。ワンショット パルスは、同じカウントをカウンターに再書き込みせずに繰り返すことができます。GATE は OUT には影響しません。ワンショット パルス中に新しいカウントがカウンターに書き込まれると、カウンターが再トリガーされない限り、現在のワンショットは影響を受けません。その場合、カウンターには新しいカウントがロードされ、新しいカウントが終了するまでワンショット パルスが継続します。
モード2(X10):レートジェネレータ
このモードでは、デバイスは n 除算カウンタとして機能し、通常はリアルタイム クロック割り込みを生成するために使用されます。
他のモードと同様に、カウント プロセスは COUNT が送信された後の次のクロック サイクルで開始されます。その後、カウンタが 1 に達するまで OUT はハイのままになり、1 クロック パルスの間ローになります。次のサイクルでは、カウントが再ロードされ、OUT が再びハイになり、プロセス全体が繰り返されます。
ハイパルス間の時間は、カウンターのレジスタ内のプリセットカウントによって決まり、次の式を使用して計算されます。
カウンターにロードされる値 =
COUNT レジスタの値の範囲は1 から1 までであり、レジスタがゼロになることはないことに注意してください。
モード3(X11):方形波発生器
このモードはモード 2 に似ています。ただし、出力の高クロック パルスと低クロック パルスの持続時間はモード 2 とは異なります。
がカウンタにロードされた数値 (COUNT メッセージ) であるとすると、出力はカウントに対してはハイになり、カウントに対してはローになります。したがって、周期はカウントになり、が奇数の場合、追加の半サイクルは OUT がハイの状態になります。
モード4(100):ソフトウェアトリガーストロボ
制御ワードと COUNT がロードされた後、カウンタがゼロに達するまで出力はハイのままになります。その後、カウンタは 1 クロック サイクル (ストローブ) の間ロー パルスを生成し、その後出力は再びハイになります。
GATE が低いとカウントが一時停止され、GATE が再び高いとカウントが再開されます。
モード5(101):ハードウェアトリガーストロボ
このモードはモード 4 に似ています。ただし、カウント プロセスは GATE 入力によってトリガーされます。
制御ワードと COUNT を受信すると、出力はハイに設定されます。デバイスが GATE 入力の立ち上がりエッジを検出すると、カウントを開始します。カウンターが 0 に達すると、出力は 1 クロック サイクルの間ローになります。その後、出力は再びハイになり、GATE の次の立ち上がりエッジでサイクルを繰り返します。
IBM PCプログラミング
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 では、必要なすべての周波数を 1 つの水晶から生成し、テレビ出力を可能にするために、この発振器は NTSC カラー サブキャリア周波数の倍数で動作する必要がありました。この周波数を 2 16 (8253 が可能な最大の除数) で割ると、 MS-DOSおよび関連オペレーティング システム で使用される ≈18.2 Hz のタイマー割り込みが生成されます。
オリジナルの IBM PC では、カウンタ 0 は計時割り込みを生成するために使用されます。カウンタ 1 はDRAMメモリのリフレッシュをトリガーするために使用されます。カウンタ 2 はPC スピーカーから音を生成するために使用されます。
新しいマザーボードには、ACPI ( Advanced Configuration and Power Interface )を介した追加のカウンター、ローカルの 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 に送信されます)。カウンタはゼロまでカウントダウンし、次にハードウェア割り込み(IRQ 0、INT 8)をCPUに送信します。次に、カウンタは初期値にリセットされ、再びカウントダウンを開始します。可能な最高速の割り込み周波数は、0.5 メガヘルツを少し超える程度です。可能な最低速の周波数は、MS-DOSまたは互換オペレーティング システムを実行するコンピュータで通常使用される周波数で、約 18.2 Hz です。これらのリアル モードオペレーティング システムでは、BIOS は受信した INT 8 呼び出しの数をリアル モード アドレス 0040:006c に蓄積し、プログラムで読み取ることができます。
タイマーがカウントダウンすると、I/O ポートを2 回読み取ることによって、その値を直接読み取ることもできます。最初に下位バイトを、次に上位バイトを読み取ってください。ただし、x86 PC などのフリーランニング カウンター アプリケーションでは、読み取られた両方のバイトが同じ値に属するように、最初に目的のチャネルのラッチコマンドを制御レジスタに書き込む必要があります。
2002年のマイクロソフトの文書によると、「このハードウェア[8254]からの読み取りと書き込みにはIOポートを介した通信が必要なため、プログラミングには数サイクルかかり、OSにとって非常にコストがかかります。このため、非周期機能は実際には使用されていません。」[10]
参照
参考文献
- ^ abc 「Intel 82C54 CHMOS Programmabe Interval Timer」(PDF) (データシート)。 2015年6月3日時点のオリジナル(PDF)よりアーカイブ。 2012年11月26日閲覧。
- ^ Deepali A. Godse、Atul P. Godse (2007)。高度なマイクロプロセッサ。技術出版物。p. 74。ISBN 978-81-89411-33-6。
- ^ 「Intel」(PDF ) .pdf.datasheetcatalog.com .
- ^ Intel Corporation、「Focus Components: Military Intelligence: Timers, EPROMs, Leadless Chip Carriers」、Solutions、1983 年 3 月/4 月、12 ページ。
- ^ Intel Corporation、「NewsBit: Intel が数種の製品の CMOS バージョンで Oki のライセンスを取得」、Solutions、1984 年 7 月/8 月、1 ページ。
- ^ アシュボーン、ジム、「高度なパッケージング:少しの努力で大きな成果が得られる」、インテル コーポレーション、ソリューション、1986 年 1 月/2 月、2 ページ
- ^ 「8254/82C54: プログラム可能なインターバルタイマーの紹介」。Intel Corporation。2016年11月22日時点のオリジナルよりアーカイブ。2011年8月21日閲覧。
- ^ 「MSM 82c53 データシート」(PDF) 。 2014年12月6日時点のオリジナル(PDF)よりアーカイブ。 2012年11月26日閲覧。
- ^ 「マルチメディア タイマー サポートを提供するためのガイドライン」。Microsoft。2002年 9 月 20 日。2010 年10 月 13 日に閲覧。
- ^ マルチメディア タイマー サポートを提供するためのガイドライン
さらに読む
- Gilluwe, Frank Van (1997)。The Undocumented PC: I/O、CPU、固定メモリ領域のプログラマー向けガイド (第 2 版、イラスト入り)。Addison- Wesley。ISBN 978-0-201-47950-8。
- Intel Corporation、「8253 プログラマブル インターバル タイマー」、Intel 8080 マイクロコンピュータ システム ユーザーズ マニュアル、1975 年 9 月、5-169 ページ、bitsaver.org の PDF から
外部リンク
- 82C54 データシート
- Intel 8253 PIT チップの概要 2011 年 9 月 29 日にWayback Machineにアーカイブされました
- Intel 8253 完全データシート 2012年2月20日Wayback Machineにアーカイブ
- 8254/82C54 プログラマブル インターバル タイマーに関する FAQ
- プログラム可能なインターバルタイマー – OSDev Wiki
