Merge the EN version changes, 1.8 -> 1.9.
Submitted by: Houichi Hirose <shou@kt.rim.or.jp> Reviewed by: Mitsuru Iwasaki <iwasaki@jp.freebsd.org>
This commit is contained in:
parent
3bbf54681d
commit
8fdaddd1ed
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=2063
2 changed files with 478 additions and 264 deletions
|
@ -1,6 +1,6 @@
|
||||||
<!-- $Id: dma.sgml,v 1.7 1997-08-25 05:13:25 max Exp $ -->
|
<!-- $Id: dma.sgml,v 1.8 1997-10-14 03:49:10 max Exp $ -->
|
||||||
<!-- The FreeBSD Japanese Documentation Project -->
|
<!-- The FreeBSD Japanese Documentation Project -->
|
||||||
<!-- Original revision: 1.8 -->
|
<!-- Original revision: 1.9 -->
|
||||||
<!-- 日本語訳 鈴木康修 (yasu@hike.te.chiba-u.ac.jp) -->
|
<!-- 日本語訳 鈴木康修 (yasu@hike.te.chiba-u.ac.jp) -->
|
||||||
<!--
|
<!--
|
||||||
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
|
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<p><em>原作: &a.uhclem;<newline>
|
<p><em>原作: &a.uhclem;<newline>
|
||||||
<newline>訳: &a.yasu;<newline>
|
<newline>訳: &a.yasu;<newline>
|
||||||
10 December 1996.</em>
|
10 December 1996. 最終更新日 8 October 1997.</em>
|
||||||
|
|
||||||
<!-- Version 1(3) -->
|
<!-- Version 1(3) -->
|
||||||
|
|
||||||
|
@ -59,24 +59,26 @@
|
||||||
なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.
|
なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.
|
||||||
</quote>
|
</quote>
|
||||||
|
|
||||||
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常そのDMAを
|
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常
|
||||||
使用するハードウェアがそのチャネルについてDRQを使って
|
与えられたDMAチャネルを使用するハードウェアがそのチャネルについて
|
||||||
転送を要求した時のみ動作します.
|
DRQ線を使って転送を要求した時のみ動作します.
|
||||||
|
|
||||||
|
|
||||||
<sect1><heading>DMA転送の例</heading>
|
<sect1><heading>DMA転送の例</heading>
|
||||||
|
|
||||||
<p>これはDMA転送の手順の例です.
|
<p>DMA転送の発生と処理の手順の例をあげてみましょう.
|
||||||
この例では, フロッピーディスクコントローラ (FDC)が
|
この例では, フロッピーディスクコントローラ (FDC)が
|
||||||
ディスケットから1バイト読み込んで, DMAを使って,メモリの0x00123456番地に
|
ディスケットから1バイト読み込んで, DMAを使って,メモリの0x00123456番地に
|
||||||
格納したいとします. 処理は, FDCによって, DRQ2信号を有効にして
|
格納したいとします. 処理は, FDCが, DRQ2信号(DMAチャンネル2に
|
||||||
DMAコントローラに要求を伝えることで開始します.
|
対するDRQ線)を有効にして
|
||||||
|
DMAコントローラに要求を伝えることで開始されます.
|
||||||
|
|
||||||
DMAコントローラはDRQ2シグナルが有効になったことを記録します.
|
DMAコントローラはDRQ2シグナルが有効になったことを記録します.
|
||||||
するとDMAコントローラはDMAチャネル2がプログラムされ, 有効に
|
するとDMAコントローラはDMAチャネル2がプログラムされ, マスクが
|
||||||
なっていることを確認します.
|
かかっていない(有効になっている)ことを確認します.
|
||||||
DMAコントローラはまた, 他のDMAチャネルがアクティブでないか, または
|
同様に, DMAコントローラは, 他のDMAチャネルがアクティブまたは
|
||||||
より高い優先度を持っていないかを確認します.
|
アクティブになろうとしていないこと, そしてより高い優先度を持って
|
||||||
|
いないことを確認します.
|
||||||
一旦これらのチェックが完了すると, DMACはDMACがバスを使うために
|
一旦これらのチェックが完了すると, DMACはDMACがバスを使うために
|
||||||
バスを開放するようにCPUに要求します.
|
バスを開放するようにCPUに要求します.
|
||||||
DMACはCPUにHRQ信号を送ってバスを要求します.
|
DMACはCPUにHRQ信号を送ってバスを要求します.
|
||||||
|
@ -115,7 +117,7 @@
|
||||||
FDCはバイトデータが転送されたことを認識します.
|
FDCはバイトデータが転送されたことを認識します.
|
||||||
|
|
||||||
DMAサイクルは1度に1バイトしか転送しないので,
|
DMAサイクルは1度に1バイトしか転送しないので,
|
||||||
FDCはDRQ2信号を止めて, DMACに転送の終了を知らせます.
|
FDCはDRQ2信号を止めて, DMACに転送が終了したことを知らせます.
|
||||||
DMACは-DACK2信号を解除して, FDCはバス上へのデータ出力を
|
DMACは-DACK2信号を解除して, FDCはバス上へのデータ出力を
|
||||||
停止しなくてはならないことを知らせます.
|
停止しなくてはならないことを知らせます.
|
||||||
|
|
||||||
|
@ -132,24 +134,29 @@
|
||||||
典型的なフロッピーディスクの1セクタについては, 上記のプロセスが
|
典型的なフロッピーディスクの1セクタについては, 上記のプロセスが
|
||||||
それぞれのバイトについて1回行われ, 全部で512回繰り返されます.
|
それぞれのバイトについて1回行われ, 全部で512回繰り返されます.
|
||||||
1バイト転送される毎に,DMAC内のアドレスレジスタはインクリメントされ,
|
1バイト転送される毎に,DMAC内のアドレスレジスタはインクリメントされ,
|
||||||
何バイト転送すればよいかを示すカウンタがデクリメントされます.
|
同じくDMAC内にある, 何バイト転送すればよいかを示すカウンタが
|
||||||
|
デクリメントされます.
|
||||||
|
|
||||||
カウンタが0になると, DMAはカウンタが0になったことを示すEOP信号を
|
カウンタが0になると, DMAはEOP信号を送ります. この信号は
|
||||||
送り, DMAコントローラがCPUによって再びプログラムされるまで
|
カウンタが0であり, DMAコントローラがCPUによって再び
|
||||||
これ以上データは転送されなくなります.
|
プログラムされるまで, これ以上データは転送されないことを
|
||||||
|
示すものです.
|
||||||
|
|
||||||
このイベントはターミナルカウント(TC)とも呼ばれます.
|
このイベントはターミナルカウント(TC)とも呼ばれます.
|
||||||
EOP信号は1本しかありません. なぜならどんな時もただ1つのDMAチャネル
|
EOP信号は1本しかありません. そして, 一度にアクティブにできる
|
||||||
のみをアクティブにすることができるためです.
|
DMAチャネルは一本だけなので, 現在アクティブであるDMAチャネルこそが,
|
||||||
|
たった今処理を終了したDMAチャネルだと言うことができます.
|
||||||
|
|
||||||
もし, バッファの転送が完了した時に周辺機器から割り込みを発生させたい
|
もし, バッファの転送が完了した時に周辺機器から割り込みを発生させたい
|
||||||
とき, 周辺機器は -DACK信号およびEOP信号の両方が同時に発信されたか
|
とき, 周辺機器は -DACKn信号およびEOP信号の両方が同時に発信されたか
|
||||||
どうかをテストします. それが生じると, DMACはCPUの介在がなければ
|
どうかをテストします. その場合, DMACはCPUの介在がなければ
|
||||||
これ以上はその周辺機器についての情報を転送しないことを意味します.
|
これ以上はその周辺機器についての情報を転送しません.
|
||||||
すると周辺機器はプロセッサの注意を得るために割り込み信号のうちの1つを
|
その後で, 周辺機器はプロセッサに割り込みを生じさせるために,
|
||||||
発信します. DMAチップ自身は割り込みを生じさせる能力は持っていません.
|
何らかの割り込み信号を発生させることができます. PCアーキテクチャ
|
||||||
|
においては, DMAチップ自身が割り込みを生じさせることはできません.
|
||||||
周辺機器とそれに関連するハードウェアが割り込みを生成する責任を
|
周辺機器とそれに関連するハードウェアが割り込みを生成する責任を
|
||||||
持ちます.
|
持ちます. また, DMAを使用する周辺機器が割り込みを使用しない
|
||||||
|
可能性もあります.
|
||||||
|
|
||||||
DMACが要求を出したときにはCPUは常にバスをDMACに開放しますが,
|
DMACが要求を出したときにはCPUは常にバスをDMACに開放しますが,
|
||||||
この動作は, DMACがアクティブになった時にプロセッサが命令を実行するのに
|
この動作は, DMACがアクティブになった時にプロセッサが命令を実行するのに
|
||||||
|
@ -173,13 +180,13 @@
|
||||||
IBM PCが64k以上のメモリをサポートしていたため,
|
IBM PCが64k以上のメモリをサポートしていたため,
|
||||||
DMACが64kを越えるメモリ番地に読み込み又は書き込みを行うために
|
DMACが64kを越えるメモリ番地に読み込み又は書き込みを行うために
|
||||||
変更を行う必要が生じました.
|
変更を行う必要が生じました.
|
||||||
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに
|
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに,
|
||||||
ついてラッチを追加することでした. つまり, 読み込む又は書き込む先の
|
読み込み元または書き込み先のアドレスの上位ビットを保持するための
|
||||||
アドレスの上位ビットに保持するためのものです.
|
外部的なラッチを追加することでした.
|
||||||
DMAチャネルがアクティブな時はいつでも,
|
DMAチャネルがアクティブな時はいつでも,
|
||||||
このラッチの内容はアドレスバスに書かれて, そのチャネルのDMA操作が
|
このラッチの内容はアドレスバスに書かれて, そのチャネルのDMA操作が
|
||||||
終了するまでそこに保持されます.
|
終了するまでそこに保持されます.
|
||||||
これらのラッチは「ページレジスタ」と呼ばれます.
|
IBMはこれらのラッチを「ページレジスタ」と呼んでいます.
|
||||||
|
|
||||||
そのため上記に示した例では, DMACはアドレスの0x3456の部分をバス上に
|
そのため上記に示した例では, DMACはアドレスの0x3456の部分をバス上に
|
||||||
置き, DMAチャネル2に対するページレジスタは, 0x0012xxxxをバス上に
|
置き, DMAチャネル2に対するページレジスタは, 0x0012xxxxをバス上に
|
||||||
|
@ -188,25 +195,27 @@
|
||||||
|
|
||||||
ページレジスタのラッチはDMAチップとは独立であるので,
|
ページレジスタのラッチはDMAチップとは独立であるので,
|
||||||
読み込まれる又は書き込まれるメモリ領域は, 64kの物理的境界を
|
読み込まれる又は書き込まれるメモリ領域は, 64kの物理的境界を
|
||||||
またいではなりません.
|
またいではなりません. 例えば, もし
|
||||||
DMACがメモリの0xffff番地をアクセスすると, データの転送後,
|
DMACがメモリの0xffff番地をアクセスした場合, データの転送後,
|
||||||
DMACはアドレスレジスタをインクリメントし, 0x0000番地にある次のバイトを
|
DMACはアドレスレジスタをインクリメントし, 0x0000番地にある次のバイトを
|
||||||
アクセスします. 0x10000番地ではありません.
|
アクセスします. 0x10000番地ではありません.
|
||||||
これはおそらく意図されたものとは異なっているでしょう.
|
これはおそらく意図されたものとは異なっているでしょう.
|
||||||
|
|
||||||
<quote><em>注:</em> 「物理的な」 64Kの境界を 8086モードの
|
<quote><em>注:</em> 「物理的な」 64Kの境界を 8086モードの
|
||||||
64k「セグメント」と混同してはいけません. セグメントは, セグメント
|
64k「セグメント」と混同してはいけません. セグメントは, セグメント
|
||||||
レジスタにオフセットレジスタを加算して作られるものです.
|
レジスタに数学的にオフセットレジスタを加算して作られるものです.
|
||||||
ページレジスタにはアドレスのオーバーラップはありません. </quote>
|
ページレジスタにはアドレスのオーバーラップも無く,数学的に
|
||||||
|
ORを取られることもありません. </quote>
|
||||||
|
|
||||||
さらに複雑なことには, PC/ATでは外部のDMAアドレスのラッチは
|
さらに複雑なことには, PC/ATでは外部のDMAアドレスのラッチは
|
||||||
8ビットしか保持しません. よって8+16で24ビットになり, これは
|
8ビットしか保持しません. よって8+16で24ビットになり, これは
|
||||||
DMAが0から16メガの間のメモリ番地しか指し示せないことを
|
DMAが0から16メガの間のメモリ番地しか指し示せないことを
|
||||||
意味します. 16メガ以上のメモリを持ったより新しいマシンにおいても,
|
意味します. 16メガ以上のメモリを持ったより新しいマシンにおいても,
|
||||||
PCコンパチブルなDMAでは16メガ以上のメモリ番地にはアクセスできません.
|
標準的なPCコンパチブルなDMAでは16メガ以上のメモリ番地には
|
||||||
|
アクセスできません.
|
||||||
|
|
||||||
この制限を避けるために, オペレーティングシステムは
|
この制限を避けるために, オペレーティングシステムは
|
||||||
16メガ以下にある物理的な64kの境界をまたがない領域にバッファを
|
16メガ以下にある物理的な64kの境界をまたがない領域にRAMバッファを
|
||||||
予約します. そして, DMACはデータを周辺機器からそのバッファに
|
予約します. そして, DMACはデータを周辺機器からそのバッファに
|
||||||
転送するようにプログラムされます. 一旦DMACがこのバッファに
|
転送するようにプログラムされます. 一旦DMACがこのバッファに
|
||||||
データを動かすと, オペレーティングシステムは本当にデータを
|
データを動かすと, オペレーティングシステムは本当にデータを
|
||||||
|
@ -219,6 +228,10 @@
|
||||||
「バウンスバッファ」と呼ばれます. MS-DOSの世界では,
|
「バウンスバッファ」と呼ばれます. MS-DOSの世界では,
|
||||||
これらは「スマートバッファ」などと呼ばれます.
|
これらは「スマートバッファ」などと呼ばれます.
|
||||||
|
|
||||||
|
<quote><em>注意:</em> 82374と呼ばれる8237の新しい実装においては,
|
||||||
|
ページレジスタを16ビットで指定して, バウンスバッファを使用しなくても,
|
||||||
|
32ビットのアドレス空間全体にアクセスすることが可能です.
|
||||||
|
|
||||||
|
|
||||||
<sect1><heading>DMA操作モードとその設定</heading>
|
<sect1><heading>DMA操作モードとその設定</heading>
|
||||||
|
|
||||||
|
@ -235,8 +248,8 @@
|
||||||
よって使用されます.
|
よって使用されます.
|
||||||
周辺装置は次の転送の準備ができる毎にDMAを要求します.
|
周辺装置は次の転送の準備ができる毎にDMAを要求します.
|
||||||
|
|
||||||
フロッピーディスクコントローラは1バイトのバッファしか持たないので,
|
標準的なPCコンパチブルなフロッピーディスクコントローラ(NEC 765)は
|
||||||
このモードを使用します.
|
1バイトのバッファしか持たないので, このモードを使用します.
|
||||||
|
|
||||||
|
|
||||||
<tag>ブロック/デマンド転送モード</tag>
|
<tag>ブロック/デマンド転送モード</tag>
|
||||||
|
@ -249,10 +262,10 @@
|
||||||
|
|
||||||
ブロック転送モードとデマンド転送モードの違いは, 一旦ブロック転送が
|
ブロック転送モードとデマンド転送モードの違いは, 一旦ブロック転送が
|
||||||
始まると,転送カウンタか0になるまでそれが行われるところです.
|
始まると,転送カウンタか0になるまでそれが行われるところです.
|
||||||
1バイト転送するにはDRQが -DACK が有効になるまでの間だけ
|
DRQは-DACKが有効になるまでの間は有効でなければなりません.
|
||||||
有効であれば充分です.
|
デマンドモードはDRQが有効な間転送が続けられます.
|
||||||
デマンドモードはDRQが有効な間は転送が続けられます.
|
DRQが有効でなくなった場合, DMAはその時点で転送を中断し,
|
||||||
DMACが転送を一時中止した場合はバスを解放してCPUに返します.
|
バスを解放してCPUに返します.
|
||||||
その後、DRQが有効になると, 転送は中断したところから再開されます.
|
その後、DRQが有効になると, 転送は中断したところから再開されます.
|
||||||
|
|
||||||
データの転送, 特に転送に使われるメモリ番地が16Mを越える場合に,
|
データの転送, 特に転送に使われるメモリ番地が16Mを越える場合に,
|
||||||
|
@ -264,35 +277,38 @@
|
||||||
このメカニズムはDMAチャネルがバスを要求することを許可する
|
このメカニズムはDMAチャネルがバスを要求することを許可する
|
||||||
ものですが, 接続されたデバイスはバス上のアドレス情報の配置に
|
ものですが, 接続されたデバイスはバス上のアドレス情報の配置に
|
||||||
ついてDMACに代わって責任を持ちます.
|
ついてDMACに代わって責任を持ちます.
|
||||||
これはいわゆる「バスマスタ」というものです.
|
これは「バスマスタ」と呼ばれる技術の実装に利用されます.
|
||||||
|
|
||||||
カスケードモードのDMAチャネルがバスのコントロールを受け取ると,
|
カスケードモードのDMAチャネルがバスのコントロールを受け取ると,
|
||||||
DMAは通常行われるようなバス上のアドレスとI/Oコントロール信号の
|
DMAは通常行われるようなバス上のアドレスとI/Oコントロール信号の
|
||||||
出力を行いません. 代わりに, DMAはこのチャネルの -DACK信号を
|
出力を行いません. 代わりに, DMAはアクティブなチャネルの -DACK信号を
|
||||||
有効にします.
|
有効にします.
|
||||||
|
|
||||||
この時点で, アドレスとバスコントロール信号の供給は
|
この時点で, アドレスとバスコントロール信号の供給は
|
||||||
DMAチャネルに接続されたデバイスが担当します.
|
DMAチャネルに接続された周辺機器が担当します.
|
||||||
周辺機器はシステムバスの完全なコントロールを行い,
|
周辺機器はシステムバスの完全なコントロールを行い,
|
||||||
16メガ以下の任意のアドレスの読み込みおよび書き込みを行うことが
|
16メガ以下の任意のアドレスの読み込みおよび書き込みを行うことが
|
||||||
できます. 周辺機器はバスの使用を終えると, DRQ線を無効にして,
|
できます. 周辺機器はバスの使用を終えるとDRQ線を無効にするので,
|
||||||
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返します.
|
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返すことが
|
||||||
|
できます.
|
||||||
|
|
||||||
カスケードモードは複数のDMAコントローラを相互接続するのに
|
カスケードモードは複数のDMAコントローラを相互接続するのに
|
||||||
使われます. PC内ではDMAチャネル4がまさにこの用途に使われています.
|
使われます. PC内ではDMAチャネル4がまさにこの用途に使われています.
|
||||||
周辺機器がDMAチャネル0, 1, 2, 3でバスを要求すると,
|
周辺機器がDMAチャネル0, 1, 2, 3でバスを要求すると,
|
||||||
スレーブDMAコントローラは HLDREQ を有効にしますが,
|
スレーブDMAコントローラは HLDREQ を有効にしますが,
|
||||||
この線は実際にはプライマリDMAコントローラのDRQ4に接続されています.
|
この線はCPUではなく, 実際にはプライマリDMAコントローラのDRQ4に
|
||||||
プライマリのDMAコントローラはその後 HLDREQ を使ってCPUにバスを
|
接続されています.
|
||||||
要求します. バスが与えられると, -DACK4が有効になり,
|
その後, チャンネル4になにか仕事があるものと見なしたプライマリの
|
||||||
|
DMAコントローラは HLDREQ を使ってCPUにバスを
|
||||||
|
要求します. バスが与えられると, -DACK4が有効になりますが,
|
||||||
この線は実際にはスレーブDMAコントローラの HLDA信号に
|
この線は実際にはスレーブDMAコントローラの HLDA信号に
|
||||||
接続されています.
|
接続されています.
|
||||||
スレーブDMAコントローラはその後要求したDMAチャネルに対して
|
スレーブDMAコントローラはその後要求したDMAチャネル
|
||||||
データを転送するか, SCSIコントローラのような
|
(0, 1, 2, 3) に対してデータを転送するか, SCSIコントローラのような
|
||||||
バスマスタリングを要求する周辺機器にバスを許可します.
|
バスマスタリングを要求する周辺機器にバスを許可します.
|
||||||
|
|
||||||
このような配線がおこなわれているため, PC/ATシステムでは
|
このような配線がおこなわれているため, PC/ATシステムの
|
||||||
DMAチャネルは
|
周辺機器ではDMAチャネルは
|
||||||
0, 1, 2, 3, 5, 6, 7のみが使用できます.
|
0, 1, 2, 3, 5, 6, 7のみが使用できます.
|
||||||
|
|
||||||
<quote><em>注:</em>
|
<quote><em>注:</em>
|
||||||
|
@ -355,9 +371,10 @@
|
||||||
|
|
||||||
<p>プログラムされるDMAチャネルは, 通常, 設定を行う前に
|
<p>プログラムされるDMAチャネルは, 通常, 設定を行う前に
|
||||||
「マスクする」べきです.
|
「マスクする」べきです.
|
||||||
これはハードウェアが予期せずDRQを有効にすると, たとえ全てのパラメータが
|
これはハードウェアが予期せずそのチャンネルに対してDRQを有効に
|
||||||
|
した場合, たとえ全てのパラメータが
|
||||||
満たされてない場合や更新されていない場合でも, DMACは
|
満たされてない場合や更新されていない場合でも, DMACは
|
||||||
それに応答してしまうからです.
|
それに応答してしまう可能性があるからです.
|
||||||
|
|
||||||
マスクを行ってから,ホストは転送の方向(メモリからI/O,
|
マスクを行ってから,ホストは転送の方向(メモリからI/O,
|
||||||
もしくはI/Oからメモリ)と, 転送に使用するDMA操作のモード
|
もしくはI/Oからメモリ)と, 転送に使用するDMA操作のモード
|
||||||
|
@ -373,14 +390,14 @@
|
||||||
I/Oポートの別のセットを通してアクセスされます.
|
I/Oポートの別のセットを通してアクセスされます.
|
||||||
|
|
||||||
すべての設定ができると, DMAチャネルはマスクを解除することができます.
|
すべての設定ができると, DMAチャネルはマスクを解除することができます.
|
||||||
そのDMAチャネルは「準備ができた」とみなされ, DRQが有効になると
|
そのDMAチャネルは「準備ができた」とみなされ, そのチャンネルのDRQが
|
||||||
応答します.
|
有効になると応答します.
|
||||||
|
|
||||||
8237のプログラミングの正確な詳細については,
|
8237のプログラミングの正確な詳細については,
|
||||||
ハードウェアデータブックを参照してください.
|
ハードウェアデータブックを参照してください.
|
||||||
PCシステムにおけるI/Oマップについても参照する必要があるでしょう.
|
PCシステムにおけるI/Oマップについても参照する必要があるでしょう.
|
||||||
このマップにはDMAおよびページレジスタのポートがどこに位置するのかを
|
このマップにはDMAおよびページレジスタのポートがどこに位置するのかを
|
||||||
書いてあります. 以下に完全な表を示します.
|
書いてあります. 以下に完全なポートのマップテーブルを示します.
|
||||||
|
|
||||||
|
|
||||||
<sect1><heading>DMAポートのマップ</heading>
|
<sect1><heading>DMAポートのマップ</heading>
|
||||||
|
@ -395,46 +412,46 @@
|
||||||
<p>DMA アドレス および カウントレジスタ
|
<p>DMA アドレス および カウントレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0x00 write Channel 0 starting address
|
0x00 write Channel 0 starting address
|
||||||
0x00 read Channel 0 current address
|
0x00 read Channel 0 current address
|
||||||
0x02 write Channel 0 starting word count
|
0x01 write Channel 0 starting word count
|
||||||
0x02 read Channel 0 remaining word count
|
0x01 read Channel 0 remaining word count
|
||||||
|
|
||||||
0x04 write Channel 1 starting address
|
0x02 write Channel 1 starting address
|
||||||
0x04 read Channel 1 current address
|
0x02 read Channel 1 current address
|
||||||
0x06 write Channel 1 starting word count
|
0x03 write Channel 1 starting word count
|
||||||
0x06 read Channel 1 remaining word count
|
0x03 read Channel 1 remaining word count
|
||||||
|
|
||||||
0x08 write Channel 2 starting address
|
0x04 write Channel 2 starting address
|
||||||
0x08 read Channel 2 current address
|
0x04 read Channel 2 current address
|
||||||
0x0a write Channel 2 starting word count
|
0x05 write Channel 2 starting word count
|
||||||
0x0a read Channel 2 remaining word count
|
0x05 read Channel 2 remaining word count
|
||||||
|
|
||||||
0x0c write Channel 3 starting address
|
0x06 write Channel 3 starting address
|
||||||
0x0c read Channel 3 current address
|
0x06 read Channel 3 current address
|
||||||
0x0e write Channel 3 starting word count
|
0x07 write Channel 3 starting word count
|
||||||
0x0e read Channel 3 remaining word count
|
0x07 read Channel 3 remaining word count
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
DMA コマンドレジスタ
|
DMA コマンドレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0x10 write Command Register
|
0x08 write Command Register
|
||||||
0x10 read Status Register
|
0x08 read Status Register
|
||||||
0x12 write Request Register
|
0x09 write Request Register
|
||||||
0x12 read -
|
0x09 read -
|
||||||
0x14 write Single Mask Register Bit
|
0x0a write Single Mask Register Bit
|
||||||
0x14 read -
|
0x0a read -
|
||||||
0x16 write Mode Register
|
0x0b write Mode Register
|
||||||
0x16 read -
|
0x0b read -
|
||||||
0x18 write Clear LSB/MSB Flip-Flop
|
0x0c write Clear LSB/MSB Flip-Flop
|
||||||
0x18 read -
|
0x0c read -
|
||||||
0x1a write Master Clear/Reset
|
0x0d write Master Clear/Reset
|
||||||
0x1a read Temporary Register
|
0x0d read Temporary Register (新しいバージョンでは利用不可)
|
||||||
0x1c write Clear Mask Register
|
0x0e write Clear Mask Register
|
||||||
0x1c read -
|
0x0e read -
|
||||||
0x1e write Write All Mask Register Bits
|
0x0f write Write All Mask Register Bits
|
||||||
0x1e read -
|
0x0f read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
<sect2><heading>0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)</heading>
|
<sect2><heading>0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)</heading>
|
||||||
|
@ -442,60 +459,150 @@ DMA
|
||||||
<p>DMA アドレス および カウントレジスタ
|
<p>DMA アドレス および カウントレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0xc0 write Channel 4 starting address
|
0xc0 write Channel 4 starting address
|
||||||
0xc0 read Channel 4 current address
|
0xc0 read Channel 4 current address
|
||||||
0xc2 write Channel 4 starting word count
|
0xc2 write Channel 4 starting word count
|
||||||
0xc2 read Channel 4 remaining word count
|
0xc2 read Channel 4 remaining word count
|
||||||
|
|
||||||
0xc4 write Channel 5 starting address
|
0xc4 write Channel 5 starting address
|
||||||
0xc4 read Channel 5 current address
|
0xc4 read Channel 5 current address
|
||||||
0xc6 write Channel 5 starting word count
|
0xc6 write Channel 5 starting word count
|
||||||
0xc6 read Channel 5 remaining word count
|
0xc6 read Channel 5 remaining word count
|
||||||
|
|
||||||
0xc8 write Channel 6 starting address
|
0xc8 write Channel 6 starting address
|
||||||
0xc8 read Channel 6 current address
|
0xc8 read Channel 6 current address
|
||||||
0xca write Channel 6 starting word count
|
0xca write Channel 6 starting word count
|
||||||
0xca read Channel 6 remaining word count
|
0xca read Channel 6 remaining word count
|
||||||
|
|
||||||
0xcc write Channel 7 starting address
|
0xcc write Channel 7 starting address
|
||||||
0xcc read Channel 7 current address
|
0xcc read Channel 7 current address
|
||||||
0xce write Channel 7 starting word count
|
0xce write Channel 7 starting word count
|
||||||
0xce read Channel 7 remaining word count
|
0xce read Channel 7 remaining word count
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
DMA コマンドレジスタ
|
DMA コマンドレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0xd0 write Command Register
|
0xd0 write Command Register
|
||||||
0xd0 read Status Register
|
0xd0 read Status Register
|
||||||
0xd2 write Request Register
|
0xd2 write Request Register
|
||||||
0xd2 read -
|
0xd2 read -
|
||||||
0xd4 write Single Mask Register Bit
|
0xd4 write Single Mask Register Bit
|
||||||
0xd4 read -
|
0xd4 read -
|
||||||
0xd6 write Mode Register
|
0xd6 write Mode Register
|
||||||
0xd6 read -
|
0xd6 read -
|
||||||
0xd8 write Clear LSB/MSB Flip-Flop
|
0xd8 write Clear LSB/MSB Flip-Flop
|
||||||
0xd8 read -
|
0xd8 read -
|
||||||
0xda write Master Clear/Reset
|
0xda write Master Clear/Reset
|
||||||
0xda read Temporary Register
|
0xda read Temporary Register (Intel 82374には存在しない)
|
||||||
0xdc write Clear Mask Register
|
0xdc write Clear Mask Register
|
||||||
0xdc read -
|
0xdc read -
|
||||||
0xde write Write All Mask Register Bits
|
0xde write Write All Mask Register Bits
|
||||||
0xde read -
|
0xdf read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||||
|
0xdf read Read All Mask Register Bits
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
<sect2><heading>0x80 - 0x9f DMA ページレジスタ</heading>
|
<sect2><heading>0x80 - 0x9f DMA ページレジスタ</heading>
|
||||||
|
|
||||||
<p><verb>
|
<p><verb>
|
||||||
0x87 r/w DMA Channel 0
|
0x87 r/w Channel 0 Low byte (23-16) page Register
|
||||||
0x83 r/w DMA Channel 1
|
0x83 r/w Channel 1 Low byte (23-16) page Register
|
||||||
0x81 r/w DMA Channel 2
|
0x81 r/w Channel 2 Low byte (23-16) page Register
|
||||||
0x82 r/w DMA Channel 3
|
0x82 r/w Channel 3 Low byte (23-16) page Register
|
||||||
|
|
||||||
0x8b r/w DMA Channel 5
|
0x8b r/w Channel 5 Low byte (23-16) page Register
|
||||||
0x89 r/w DMA Channel 6
|
0x89 r/w Channel 6 Low byte (23-16) page Register
|
||||||
0x8a r/w DMA Channel 7
|
0x8a r/w Channel 7 Low byte (23-16) page Register
|
||||||
|
0x8f r/w Low byte page Refresh
|
||||||
0x8f Refresh
|
</verb>
|
||||||
|
|
||||||
|
<sect2><heading>0x400 - 0x4ff 82374 Enhanced DMA Registers</heading>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Intel 82374 EISA System Component (ESC)は1996年の初めに発表されました. この中
|
||||||
|
には機能的には8237のスーパーセットであり, 1つのパッケージの中にその他の
|
||||||
|
PC互換機のコアとなる周辺コンポーネントをも含んだDMAコントローラも含まれています.
|
||||||
|
このチップはEISAとPCI両方のプラットホームをターゲットにしたものであり,
|
||||||
|
scatter-gather I/O やリングバッファを始めとして, システムDMAをして32ビットの
|
||||||
|
アドレス空間全体に直接アクセスする能力も提供しています.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
これらの機能を使用する場合でも, 過去16年間のPC互換機で利用されてきた
|
||||||
|
同等機能を提供するコードも含めておく必要があります. 互換性の問題から, 82374の
|
||||||
|
レジスタの一部は, 従来の8237のレジスタをプログラムした<em>後</em>に,
|
||||||
|
転送の度にプログラムされる必要があります. 8237のレジスタに書き込みを行うとき,
|
||||||
|
ソフトウェアの下位互換性のために, 82374で追加された一部のレジスタの内容が
|
||||||
|
強制的に0にクリアされるからです.
|
||||||
|
|
||||||
|
|
||||||
|
<p><verb>
|
||||||
|
0x401 r/w Channel 0 High byte (bits 23-16) word count
|
||||||
|
0x403 r/w Channel 1 High byte (bits 23-16) word count
|
||||||
|
0x405 r/w Channel 2 High byte (bits 23-16) word count
|
||||||
|
0x407 r/w Channel 3 High byte (bits 23-16) word count
|
||||||
|
0x4c6 r/w Channel 5 High byte (bits 23-16) word count
|
||||||
|
0x4ca r/w Channel 6 High byte (bits 23-16) word count
|
||||||
|
0x4ce r/w Channel 7 High byte (bits 23-16) word count
|
||||||
|
|
||||||
|
0x487 r/w Channel 0 High byte (bits 31-24) page Register
|
||||||
|
0x483 r/w Channel 1 High byte (bits 31-24) page Register
|
||||||
|
0x481 r/w Channel 2 High byte (bits 31-24) page Register
|
||||||
|
0x482 r/w Channel 3 High byte (bits 31-24) page Register
|
||||||
|
0x48b r/w Channel 5 High byte (bits 31-24) page Register
|
||||||
|
0x489 r/w Channel 6 High byte (bits 31-24) page Register
|
||||||
|
0x48a r/w Channel 6 High byte (bits 31-24) page Register
|
||||||
|
0x48f r/w High byte page Refresh
|
||||||
|
|
||||||
|
0x4e0 r/w Channel 0 Stop Register (bits 7-2)
|
||||||
|
0x4e1 r/w Channel 0 Stop Register (bits 15-8)
|
||||||
|
0x4e2 r/w Channel 0 Stop Register (bits 23-16)
|
||||||
|
0x4e4 r/w Channel 1 Stop Register (bits 7-2)
|
||||||
|
0x4e5 r/w Channel 1 Stop Register (bits 15-8)
|
||||||
|
0x4e6 r/w Channel 1 Stop Register (bits 23-16)
|
||||||
|
0x4e8 r/w Channel 2 Stop Register (bits 7-2)
|
||||||
|
0x4e9 r/w Channel 2 Stop Register (bits 15-8)
|
||||||
|
0x4ea r/w Channel 2 Stop Register (bits 23-16)
|
||||||
|
0x4ec r/w Channel 3 Stop Register (bits 7-2)
|
||||||
|
0x4ed r/w Channel 3 Stop Register (bits 15-8)
|
||||||
|
0x4ee r/w Channel 3 Stop Register (bits 23-16)
|
||||||
|
0x4f4 r/w Channel 5 Stop Register (bits 7-2)
|
||||||
|
0x4f5 r/w Channel 5 Stop Register (bits 15-8)
|
||||||
|
0x4f6 r/w Channel 5 Stop Register (bits 23-16)
|
||||||
|
0x4f8 r/w Channel 6 Stop Register (bits 7-2)
|
||||||
|
0x4f9 r/w Channel 6 Stop Register (bits 15-8)
|
||||||
|
0x4fa r/w Channel 6 Stop Register (bits 23-16)
|
||||||
|
0x4fc r/w Channel 7 Stop Register (bits 7-2)
|
||||||
|
0x4fd r/w Channel 7 Stop Register (bits 15-8)
|
||||||
|
0x4fe r/w Channel 7 Stop Register (bits 23-16)
|
||||||
|
|
||||||
|
0x40a write Channels 0-3 Chaining Mode Register
|
||||||
|
0x40a read Channel Interrupt Status Register
|
||||||
|
0x4d4 write Channels 4-7 Chaining Mode Register
|
||||||
|
0x4d4 read Chaining Mode Status
|
||||||
|
0x40c read Chain Buffer Expiration Control Register
|
||||||
|
|
||||||
|
0x410 write Channel 0 Scatter-Gather Command Register
|
||||||
|
0x411 write Channel 1 Scatter-Gather Command Register
|
||||||
|
0x412 write Channel 2 Scatter-Gather Command Register
|
||||||
|
0x413 write Channel 3 Scatter-Gather Command Register
|
||||||
|
0x415 write Channel 5 Scatter-Gather Command Register
|
||||||
|
0x416 write Channel 6 Scatter-Gather Command Register
|
||||||
|
0x417 write Channel 7 Scatter-Gather Command Register
|
||||||
|
|
||||||
|
0x418 read Channel 0 Scatter-Gather Status Register
|
||||||
|
0x419 read Channel 1 Scatter-Gather Status Register
|
||||||
|
0x41a read Channel 2 Scatter-Gather Status Register
|
||||||
|
0x41b read Channel 3 Scatter-Gather Status Register
|
||||||
|
0x41d read Channel 5 Scatter-Gather Status Register
|
||||||
|
0x41e read Channel 5 Scatter-Gather Status Register
|
||||||
|
0x41f read Channel 7 Scatter-Gather Status Register
|
||||||
|
|
||||||
|
0x420-0x423 r/w Channel 0 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x424-0x427 r/w Channel 1 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x428-0x42b r/w Channel 2 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x42c-0x42f r/w Channel 3 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x434-0x437 r/w Channel 5 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x438-0x43b r/w Channel 6 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x43c-0x43f r/w Channel 7 Scatter-Gather Descripter Table Pointer Register
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<!-- $Id: dma.sgml,v 1.7 1997-08-25 05:13:25 max Exp $ -->
|
<!-- $Id: dma.sgml,v 1.8 1997-10-14 03:49:10 max Exp $ -->
|
||||||
<!-- The FreeBSD Japanese Documentation Project -->
|
<!-- The FreeBSD Japanese Documentation Project -->
|
||||||
<!-- Original revision: 1.8 -->
|
<!-- Original revision: 1.9 -->
|
||||||
<!-- 日本語訳 鈴木康修 (yasu@hike.te.chiba-u.ac.jp) -->
|
<!-- 日本語訳 鈴木康修 (yasu@hike.te.chiba-u.ac.jp) -->
|
||||||
<!--
|
<!--
|
||||||
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
|
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<p><em>原作: &a.uhclem;<newline>
|
<p><em>原作: &a.uhclem;<newline>
|
||||||
<newline>訳: &a.yasu;<newline>
|
<newline>訳: &a.yasu;<newline>
|
||||||
10 December 1996.</em>
|
10 December 1996. 最終更新日 8 October 1997.</em>
|
||||||
|
|
||||||
<!-- Version 1(3) -->
|
<!-- Version 1(3) -->
|
||||||
|
|
||||||
|
@ -59,24 +59,26 @@
|
||||||
なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.
|
なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.
|
||||||
</quote>
|
</quote>
|
||||||
|
|
||||||
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常そのDMAを
|
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常
|
||||||
使用するハードウェアがそのチャネルについてDRQを使って
|
与えられたDMAチャネルを使用するハードウェアがそのチャネルについて
|
||||||
転送を要求した時のみ動作します.
|
DRQ線を使って転送を要求した時のみ動作します.
|
||||||
|
|
||||||
|
|
||||||
<sect1><heading>DMA転送の例</heading>
|
<sect1><heading>DMA転送の例</heading>
|
||||||
|
|
||||||
<p>これはDMA転送の手順の例です.
|
<p>DMA転送の発生と処理の手順の例をあげてみましょう.
|
||||||
この例では, フロッピーディスクコントローラ (FDC)が
|
この例では, フロッピーディスクコントローラ (FDC)が
|
||||||
ディスケットから1バイト読み込んで, DMAを使って,メモリの0x00123456番地に
|
ディスケットから1バイト読み込んで, DMAを使って,メモリの0x00123456番地に
|
||||||
格納したいとします. 処理は, FDCによって, DRQ2信号を有効にして
|
格納したいとします. 処理は, FDCが, DRQ2信号(DMAチャンネル2に
|
||||||
DMAコントローラに要求を伝えることで開始します.
|
対するDRQ線)を有効にして
|
||||||
|
DMAコントローラに要求を伝えることで開始されます.
|
||||||
|
|
||||||
DMAコントローラはDRQ2シグナルが有効になったことを記録します.
|
DMAコントローラはDRQ2シグナルが有効になったことを記録します.
|
||||||
するとDMAコントローラはDMAチャネル2がプログラムされ, 有効に
|
するとDMAコントローラはDMAチャネル2がプログラムされ, マスクが
|
||||||
なっていることを確認します.
|
かかっていない(有効になっている)ことを確認します.
|
||||||
DMAコントローラはまた, 他のDMAチャネルがアクティブでないか, または
|
同様に, DMAコントローラは, 他のDMAチャネルがアクティブまたは
|
||||||
より高い優先度を持っていないかを確認します.
|
アクティブになろうとしていないこと, そしてより高い優先度を持って
|
||||||
|
いないことを確認します.
|
||||||
一旦これらのチェックが完了すると, DMACはDMACがバスを使うために
|
一旦これらのチェックが完了すると, DMACはDMACがバスを使うために
|
||||||
バスを開放するようにCPUに要求します.
|
バスを開放するようにCPUに要求します.
|
||||||
DMACはCPUにHRQ信号を送ってバスを要求します.
|
DMACはCPUにHRQ信号を送ってバスを要求します.
|
||||||
|
@ -115,7 +117,7 @@
|
||||||
FDCはバイトデータが転送されたことを認識します.
|
FDCはバイトデータが転送されたことを認識します.
|
||||||
|
|
||||||
DMAサイクルは1度に1バイトしか転送しないので,
|
DMAサイクルは1度に1バイトしか転送しないので,
|
||||||
FDCはDRQ2信号を止めて, DMACに転送の終了を知らせます.
|
FDCはDRQ2信号を止めて, DMACに転送が終了したことを知らせます.
|
||||||
DMACは-DACK2信号を解除して, FDCはバス上へのデータ出力を
|
DMACは-DACK2信号を解除して, FDCはバス上へのデータ出力を
|
||||||
停止しなくてはならないことを知らせます.
|
停止しなくてはならないことを知らせます.
|
||||||
|
|
||||||
|
@ -132,24 +134,29 @@
|
||||||
典型的なフロッピーディスクの1セクタについては, 上記のプロセスが
|
典型的なフロッピーディスクの1セクタについては, 上記のプロセスが
|
||||||
それぞれのバイトについて1回行われ, 全部で512回繰り返されます.
|
それぞれのバイトについて1回行われ, 全部で512回繰り返されます.
|
||||||
1バイト転送される毎に,DMAC内のアドレスレジスタはインクリメントされ,
|
1バイト転送される毎に,DMAC内のアドレスレジスタはインクリメントされ,
|
||||||
何バイト転送すればよいかを示すカウンタがデクリメントされます.
|
同じくDMAC内にある, 何バイト転送すればよいかを示すカウンタが
|
||||||
|
デクリメントされます.
|
||||||
|
|
||||||
カウンタが0になると, DMAはカウンタが0になったことを示すEOP信号を
|
カウンタが0になると, DMAはEOP信号を送ります. この信号は
|
||||||
送り, DMAコントローラがCPUによって再びプログラムされるまで
|
カウンタが0であり, DMAコントローラがCPUによって再び
|
||||||
これ以上データは転送されなくなります.
|
プログラムされるまで, これ以上データは転送されないことを
|
||||||
|
示すものです.
|
||||||
|
|
||||||
このイベントはターミナルカウント(TC)とも呼ばれます.
|
このイベントはターミナルカウント(TC)とも呼ばれます.
|
||||||
EOP信号は1本しかありません. なぜならどんな時もただ1つのDMAチャネル
|
EOP信号は1本しかありません. そして, 一度にアクティブにできる
|
||||||
のみをアクティブにすることができるためです.
|
DMAチャネルは一本だけなので, 現在アクティブであるDMAチャネルこそが,
|
||||||
|
たった今処理を終了したDMAチャネルだと言うことができます.
|
||||||
|
|
||||||
もし, バッファの転送が完了した時に周辺機器から割り込みを発生させたい
|
もし, バッファの転送が完了した時に周辺機器から割り込みを発生させたい
|
||||||
とき, 周辺機器は -DACK信号およびEOP信号の両方が同時に発信されたか
|
とき, 周辺機器は -DACKn信号およびEOP信号の両方が同時に発信されたか
|
||||||
どうかをテストします. それが生じると, DMACはCPUの介在がなければ
|
どうかをテストします. その場合, DMACはCPUの介在がなければ
|
||||||
これ以上はその周辺機器についての情報を転送しないことを意味します.
|
これ以上はその周辺機器についての情報を転送しません.
|
||||||
すると周辺機器はプロセッサの注意を得るために割り込み信号のうちの1つを
|
その後で, 周辺機器はプロセッサに割り込みを生じさせるために,
|
||||||
発信します. DMAチップ自身は割り込みを生じさせる能力は持っていません.
|
何らかの割り込み信号を発生させることができます. PCアーキテクチャ
|
||||||
|
においては, DMAチップ自身が割り込みを生じさせることはできません.
|
||||||
周辺機器とそれに関連するハードウェアが割り込みを生成する責任を
|
周辺機器とそれに関連するハードウェアが割り込みを生成する責任を
|
||||||
持ちます.
|
持ちます. また, DMAを使用する周辺機器が割り込みを使用しない
|
||||||
|
可能性もあります.
|
||||||
|
|
||||||
DMACが要求を出したときにはCPUは常にバスをDMACに開放しますが,
|
DMACが要求を出したときにはCPUは常にバスをDMACに開放しますが,
|
||||||
この動作は, DMACがアクティブになった時にプロセッサが命令を実行するのに
|
この動作は, DMACがアクティブになった時にプロセッサが命令を実行するのに
|
||||||
|
@ -173,13 +180,13 @@
|
||||||
IBM PCが64k以上のメモリをサポートしていたため,
|
IBM PCが64k以上のメモリをサポートしていたため,
|
||||||
DMACが64kを越えるメモリ番地に読み込み又は書き込みを行うために
|
DMACが64kを越えるメモリ番地に読み込み又は書き込みを行うために
|
||||||
変更を行う必要が生じました.
|
変更を行う必要が生じました.
|
||||||
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに
|
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに,
|
||||||
ついてラッチを追加することでした. つまり, 読み込む又は書き込む先の
|
読み込み元または書き込み先のアドレスの上位ビットを保持するための
|
||||||
アドレスの上位ビットに保持するためのものです.
|
外部的なラッチを追加することでした.
|
||||||
DMAチャネルがアクティブな時はいつでも,
|
DMAチャネルがアクティブな時はいつでも,
|
||||||
このラッチの内容はアドレスバスに書かれて, そのチャネルのDMA操作が
|
このラッチの内容はアドレスバスに書かれて, そのチャネルのDMA操作が
|
||||||
終了するまでそこに保持されます.
|
終了するまでそこに保持されます.
|
||||||
これらのラッチは「ページレジスタ」と呼ばれます.
|
IBMはこれらのラッチを「ページレジスタ」と呼んでいます.
|
||||||
|
|
||||||
そのため上記に示した例では, DMACはアドレスの0x3456の部分をバス上に
|
そのため上記に示した例では, DMACはアドレスの0x3456の部分をバス上に
|
||||||
置き, DMAチャネル2に対するページレジスタは, 0x0012xxxxをバス上に
|
置き, DMAチャネル2に対するページレジスタは, 0x0012xxxxをバス上に
|
||||||
|
@ -188,25 +195,27 @@
|
||||||
|
|
||||||
ページレジスタのラッチはDMAチップとは独立であるので,
|
ページレジスタのラッチはDMAチップとは独立であるので,
|
||||||
読み込まれる又は書き込まれるメモリ領域は, 64kの物理的境界を
|
読み込まれる又は書き込まれるメモリ領域は, 64kの物理的境界を
|
||||||
またいではなりません.
|
またいではなりません. 例えば, もし
|
||||||
DMACがメモリの0xffff番地をアクセスすると, データの転送後,
|
DMACがメモリの0xffff番地をアクセスした場合, データの転送後,
|
||||||
DMACはアドレスレジスタをインクリメントし, 0x0000番地にある次のバイトを
|
DMACはアドレスレジスタをインクリメントし, 0x0000番地にある次のバイトを
|
||||||
アクセスします. 0x10000番地ではありません.
|
アクセスします. 0x10000番地ではありません.
|
||||||
これはおそらく意図されたものとは異なっているでしょう.
|
これはおそらく意図されたものとは異なっているでしょう.
|
||||||
|
|
||||||
<quote><em>注:</em> 「物理的な」 64Kの境界を 8086モードの
|
<quote><em>注:</em> 「物理的な」 64Kの境界を 8086モードの
|
||||||
64k「セグメント」と混同してはいけません. セグメントは, セグメント
|
64k「セグメント」と混同してはいけません. セグメントは, セグメント
|
||||||
レジスタにオフセットレジスタを加算して作られるものです.
|
レジスタに数学的にオフセットレジスタを加算して作られるものです.
|
||||||
ページレジスタにはアドレスのオーバーラップはありません. </quote>
|
ページレジスタにはアドレスのオーバーラップも無く,数学的に
|
||||||
|
ORを取られることもありません. </quote>
|
||||||
|
|
||||||
さらに複雑なことには, PC/ATでは外部のDMAアドレスのラッチは
|
さらに複雑なことには, PC/ATでは外部のDMAアドレスのラッチは
|
||||||
8ビットしか保持しません. よって8+16で24ビットになり, これは
|
8ビットしか保持しません. よって8+16で24ビットになり, これは
|
||||||
DMAが0から16メガの間のメモリ番地しか指し示せないことを
|
DMAが0から16メガの間のメモリ番地しか指し示せないことを
|
||||||
意味します. 16メガ以上のメモリを持ったより新しいマシンにおいても,
|
意味します. 16メガ以上のメモリを持ったより新しいマシンにおいても,
|
||||||
PCコンパチブルなDMAでは16メガ以上のメモリ番地にはアクセスできません.
|
標準的なPCコンパチブルなDMAでは16メガ以上のメモリ番地には
|
||||||
|
アクセスできません.
|
||||||
|
|
||||||
この制限を避けるために, オペレーティングシステムは
|
この制限を避けるために, オペレーティングシステムは
|
||||||
16メガ以下にある物理的な64kの境界をまたがない領域にバッファを
|
16メガ以下にある物理的な64kの境界をまたがない領域にRAMバッファを
|
||||||
予約します. そして, DMACはデータを周辺機器からそのバッファに
|
予約します. そして, DMACはデータを周辺機器からそのバッファに
|
||||||
転送するようにプログラムされます. 一旦DMACがこのバッファに
|
転送するようにプログラムされます. 一旦DMACがこのバッファに
|
||||||
データを動かすと, オペレーティングシステムは本当にデータを
|
データを動かすと, オペレーティングシステムは本当にデータを
|
||||||
|
@ -219,6 +228,10 @@
|
||||||
「バウンスバッファ」と呼ばれます. MS-DOSの世界では,
|
「バウンスバッファ」と呼ばれます. MS-DOSの世界では,
|
||||||
これらは「スマートバッファ」などと呼ばれます.
|
これらは「スマートバッファ」などと呼ばれます.
|
||||||
|
|
||||||
|
<quote><em>注意:</em> 82374と呼ばれる8237の新しい実装においては,
|
||||||
|
ページレジスタを16ビットで指定して, バウンスバッファを使用しなくても,
|
||||||
|
32ビットのアドレス空間全体にアクセスすることが可能です.
|
||||||
|
|
||||||
|
|
||||||
<sect1><heading>DMA操作モードとその設定</heading>
|
<sect1><heading>DMA操作モードとその設定</heading>
|
||||||
|
|
||||||
|
@ -235,8 +248,8 @@
|
||||||
よって使用されます.
|
よって使用されます.
|
||||||
周辺装置は次の転送の準備ができる毎にDMAを要求します.
|
周辺装置は次の転送の準備ができる毎にDMAを要求します.
|
||||||
|
|
||||||
フロッピーディスクコントローラは1バイトのバッファしか持たないので,
|
標準的なPCコンパチブルなフロッピーディスクコントローラ(NEC 765)は
|
||||||
このモードを使用します.
|
1バイトのバッファしか持たないので, このモードを使用します.
|
||||||
|
|
||||||
|
|
||||||
<tag>ブロック/デマンド転送モード</tag>
|
<tag>ブロック/デマンド転送モード</tag>
|
||||||
|
@ -249,10 +262,10 @@
|
||||||
|
|
||||||
ブロック転送モードとデマンド転送モードの違いは, 一旦ブロック転送が
|
ブロック転送モードとデマンド転送モードの違いは, 一旦ブロック転送が
|
||||||
始まると,転送カウンタか0になるまでそれが行われるところです.
|
始まると,転送カウンタか0になるまでそれが行われるところです.
|
||||||
1バイト転送するにはDRQが -DACK が有効になるまでの間だけ
|
DRQは-DACKが有効になるまでの間は有効でなければなりません.
|
||||||
有効であれば充分です.
|
デマンドモードはDRQが有効な間転送が続けられます.
|
||||||
デマンドモードはDRQが有効な間は転送が続けられます.
|
DRQが有効でなくなった場合, DMAはその時点で転送を中断し,
|
||||||
DMACが転送を一時中止した場合はバスを解放してCPUに返します.
|
バスを解放してCPUに返します.
|
||||||
その後、DRQが有効になると, 転送は中断したところから再開されます.
|
その後、DRQが有効になると, 転送は中断したところから再開されます.
|
||||||
|
|
||||||
データの転送, 特に転送に使われるメモリ番地が16Mを越える場合に,
|
データの転送, 特に転送に使われるメモリ番地が16Mを越える場合に,
|
||||||
|
@ -264,35 +277,38 @@
|
||||||
このメカニズムはDMAチャネルがバスを要求することを許可する
|
このメカニズムはDMAチャネルがバスを要求することを許可する
|
||||||
ものですが, 接続されたデバイスはバス上のアドレス情報の配置に
|
ものですが, 接続されたデバイスはバス上のアドレス情報の配置に
|
||||||
ついてDMACに代わって責任を持ちます.
|
ついてDMACに代わって責任を持ちます.
|
||||||
これはいわゆる「バスマスタ」というものです.
|
これは「バスマスタ」と呼ばれる技術の実装に利用されます.
|
||||||
|
|
||||||
カスケードモードのDMAチャネルがバスのコントロールを受け取ると,
|
カスケードモードのDMAチャネルがバスのコントロールを受け取ると,
|
||||||
DMAは通常行われるようなバス上のアドレスとI/Oコントロール信号の
|
DMAは通常行われるようなバス上のアドレスとI/Oコントロール信号の
|
||||||
出力を行いません. 代わりに, DMAはこのチャネルの -DACK信号を
|
出力を行いません. 代わりに, DMAはアクティブなチャネルの -DACK信号を
|
||||||
有効にします.
|
有効にします.
|
||||||
|
|
||||||
この時点で, アドレスとバスコントロール信号の供給は
|
この時点で, アドレスとバスコントロール信号の供給は
|
||||||
DMAチャネルに接続されたデバイスが担当します.
|
DMAチャネルに接続された周辺機器が担当します.
|
||||||
周辺機器はシステムバスの完全なコントロールを行い,
|
周辺機器はシステムバスの完全なコントロールを行い,
|
||||||
16メガ以下の任意のアドレスの読み込みおよび書き込みを行うことが
|
16メガ以下の任意のアドレスの読み込みおよび書き込みを行うことが
|
||||||
できます. 周辺機器はバスの使用を終えると, DRQ線を無効にして,
|
できます. 周辺機器はバスの使用を終えるとDRQ線を無効にするので,
|
||||||
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返します.
|
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返すことが
|
||||||
|
できます.
|
||||||
|
|
||||||
カスケードモードは複数のDMAコントローラを相互接続するのに
|
カスケードモードは複数のDMAコントローラを相互接続するのに
|
||||||
使われます. PC内ではDMAチャネル4がまさにこの用途に使われています.
|
使われます. PC内ではDMAチャネル4がまさにこの用途に使われています.
|
||||||
周辺機器がDMAチャネル0, 1, 2, 3でバスを要求すると,
|
周辺機器がDMAチャネル0, 1, 2, 3でバスを要求すると,
|
||||||
スレーブDMAコントローラは HLDREQ を有効にしますが,
|
スレーブDMAコントローラは HLDREQ を有効にしますが,
|
||||||
この線は実際にはプライマリDMAコントローラのDRQ4に接続されています.
|
この線はCPUではなく, 実際にはプライマリDMAコントローラのDRQ4に
|
||||||
プライマリのDMAコントローラはその後 HLDREQ を使ってCPUにバスを
|
接続されています.
|
||||||
要求します. バスが与えられると, -DACK4が有効になり,
|
その後, チャンネル4になにか仕事があるものと見なしたプライマリの
|
||||||
|
DMAコントローラは HLDREQ を使ってCPUにバスを
|
||||||
|
要求します. バスが与えられると, -DACK4が有効になりますが,
|
||||||
この線は実際にはスレーブDMAコントローラの HLDA信号に
|
この線は実際にはスレーブDMAコントローラの HLDA信号に
|
||||||
接続されています.
|
接続されています.
|
||||||
スレーブDMAコントローラはその後要求したDMAチャネルに対して
|
スレーブDMAコントローラはその後要求したDMAチャネル
|
||||||
データを転送するか, SCSIコントローラのような
|
(0, 1, 2, 3) に対してデータを転送するか, SCSIコントローラのような
|
||||||
バスマスタリングを要求する周辺機器にバスを許可します.
|
バスマスタリングを要求する周辺機器にバスを許可します.
|
||||||
|
|
||||||
このような配線がおこなわれているため, PC/ATシステムでは
|
このような配線がおこなわれているため, PC/ATシステムの
|
||||||
DMAチャネルは
|
周辺機器ではDMAチャネルは
|
||||||
0, 1, 2, 3, 5, 6, 7のみが使用できます.
|
0, 1, 2, 3, 5, 6, 7のみが使用できます.
|
||||||
|
|
||||||
<quote><em>注:</em>
|
<quote><em>注:</em>
|
||||||
|
@ -355,9 +371,10 @@
|
||||||
|
|
||||||
<p>プログラムされるDMAチャネルは, 通常, 設定を行う前に
|
<p>プログラムされるDMAチャネルは, 通常, 設定を行う前に
|
||||||
「マスクする」べきです.
|
「マスクする」べきです.
|
||||||
これはハードウェアが予期せずDRQを有効にすると, たとえ全てのパラメータが
|
これはハードウェアが予期せずそのチャンネルに対してDRQを有効に
|
||||||
|
した場合, たとえ全てのパラメータが
|
||||||
満たされてない場合や更新されていない場合でも, DMACは
|
満たされてない場合や更新されていない場合でも, DMACは
|
||||||
それに応答してしまうからです.
|
それに応答してしまう可能性があるからです.
|
||||||
|
|
||||||
マスクを行ってから,ホストは転送の方向(メモリからI/O,
|
マスクを行ってから,ホストは転送の方向(メモリからI/O,
|
||||||
もしくはI/Oからメモリ)と, 転送に使用するDMA操作のモード
|
もしくはI/Oからメモリ)と, 転送に使用するDMA操作のモード
|
||||||
|
@ -373,14 +390,14 @@
|
||||||
I/Oポートの別のセットを通してアクセスされます.
|
I/Oポートの別のセットを通してアクセスされます.
|
||||||
|
|
||||||
すべての設定ができると, DMAチャネルはマスクを解除することができます.
|
すべての設定ができると, DMAチャネルはマスクを解除することができます.
|
||||||
そのDMAチャネルは「準備ができた」とみなされ, DRQが有効になると
|
そのDMAチャネルは「準備ができた」とみなされ, そのチャンネルのDRQが
|
||||||
応答します.
|
有効になると応答します.
|
||||||
|
|
||||||
8237のプログラミングの正確な詳細については,
|
8237のプログラミングの正確な詳細については,
|
||||||
ハードウェアデータブックを参照してください.
|
ハードウェアデータブックを参照してください.
|
||||||
PCシステムにおけるI/Oマップについても参照する必要があるでしょう.
|
PCシステムにおけるI/Oマップについても参照する必要があるでしょう.
|
||||||
このマップにはDMAおよびページレジスタのポートがどこに位置するのかを
|
このマップにはDMAおよびページレジスタのポートがどこに位置するのかを
|
||||||
書いてあります. 以下に完全な表を示します.
|
書いてあります. 以下に完全なポートのマップテーブルを示します.
|
||||||
|
|
||||||
|
|
||||||
<sect1><heading>DMAポートのマップ</heading>
|
<sect1><heading>DMAポートのマップ</heading>
|
||||||
|
@ -395,46 +412,46 @@
|
||||||
<p>DMA アドレス および カウントレジスタ
|
<p>DMA アドレス および カウントレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0x00 write Channel 0 starting address
|
0x00 write Channel 0 starting address
|
||||||
0x00 read Channel 0 current address
|
0x00 read Channel 0 current address
|
||||||
0x02 write Channel 0 starting word count
|
0x01 write Channel 0 starting word count
|
||||||
0x02 read Channel 0 remaining word count
|
0x01 read Channel 0 remaining word count
|
||||||
|
|
||||||
0x04 write Channel 1 starting address
|
0x02 write Channel 1 starting address
|
||||||
0x04 read Channel 1 current address
|
0x02 read Channel 1 current address
|
||||||
0x06 write Channel 1 starting word count
|
0x03 write Channel 1 starting word count
|
||||||
0x06 read Channel 1 remaining word count
|
0x03 read Channel 1 remaining word count
|
||||||
|
|
||||||
0x08 write Channel 2 starting address
|
0x04 write Channel 2 starting address
|
||||||
0x08 read Channel 2 current address
|
0x04 read Channel 2 current address
|
||||||
0x0a write Channel 2 starting word count
|
0x05 write Channel 2 starting word count
|
||||||
0x0a read Channel 2 remaining word count
|
0x05 read Channel 2 remaining word count
|
||||||
|
|
||||||
0x0c write Channel 3 starting address
|
0x06 write Channel 3 starting address
|
||||||
0x0c read Channel 3 current address
|
0x06 read Channel 3 current address
|
||||||
0x0e write Channel 3 starting word count
|
0x07 write Channel 3 starting word count
|
||||||
0x0e read Channel 3 remaining word count
|
0x07 read Channel 3 remaining word count
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
DMA コマンドレジスタ
|
DMA コマンドレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0x10 write Command Register
|
0x08 write Command Register
|
||||||
0x10 read Status Register
|
0x08 read Status Register
|
||||||
0x12 write Request Register
|
0x09 write Request Register
|
||||||
0x12 read -
|
0x09 read -
|
||||||
0x14 write Single Mask Register Bit
|
0x0a write Single Mask Register Bit
|
||||||
0x14 read -
|
0x0a read -
|
||||||
0x16 write Mode Register
|
0x0b write Mode Register
|
||||||
0x16 read -
|
0x0b read -
|
||||||
0x18 write Clear LSB/MSB Flip-Flop
|
0x0c write Clear LSB/MSB Flip-Flop
|
||||||
0x18 read -
|
0x0c read -
|
||||||
0x1a write Master Clear/Reset
|
0x0d write Master Clear/Reset
|
||||||
0x1a read Temporary Register
|
0x0d read Temporary Register (新しいバージョンでは利用不可)
|
||||||
0x1c write Clear Mask Register
|
0x0e write Clear Mask Register
|
||||||
0x1c read -
|
0x0e read -
|
||||||
0x1e write Write All Mask Register Bits
|
0x0f write Write All Mask Register Bits
|
||||||
0x1e read -
|
0x0f read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
<sect2><heading>0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)</heading>
|
<sect2><heading>0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)</heading>
|
||||||
|
@ -442,60 +459,150 @@ DMA
|
||||||
<p>DMA アドレス および カウントレジスタ
|
<p>DMA アドレス および カウントレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0xc0 write Channel 4 starting address
|
0xc0 write Channel 4 starting address
|
||||||
0xc0 read Channel 4 current address
|
0xc0 read Channel 4 current address
|
||||||
0xc2 write Channel 4 starting word count
|
0xc2 write Channel 4 starting word count
|
||||||
0xc2 read Channel 4 remaining word count
|
0xc2 read Channel 4 remaining word count
|
||||||
|
|
||||||
0xc4 write Channel 5 starting address
|
0xc4 write Channel 5 starting address
|
||||||
0xc4 read Channel 5 current address
|
0xc4 read Channel 5 current address
|
||||||
0xc6 write Channel 5 starting word count
|
0xc6 write Channel 5 starting word count
|
||||||
0xc6 read Channel 5 remaining word count
|
0xc6 read Channel 5 remaining word count
|
||||||
|
|
||||||
0xc8 write Channel 6 starting address
|
0xc8 write Channel 6 starting address
|
||||||
0xc8 read Channel 6 current address
|
0xc8 read Channel 6 current address
|
||||||
0xca write Channel 6 starting word count
|
0xca write Channel 6 starting word count
|
||||||
0xca read Channel 6 remaining word count
|
0xca read Channel 6 remaining word count
|
||||||
|
|
||||||
0xcc write Channel 7 starting address
|
0xcc write Channel 7 starting address
|
||||||
0xcc read Channel 7 current address
|
0xcc read Channel 7 current address
|
||||||
0xce write Channel 7 starting word count
|
0xce write Channel 7 starting word count
|
||||||
0xce read Channel 7 remaining word count
|
0xce read Channel 7 remaining word count
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
DMA コマンドレジスタ
|
DMA コマンドレジスタ
|
||||||
|
|
||||||
<verb>
|
<verb>
|
||||||
0xd0 write Command Register
|
0xd0 write Command Register
|
||||||
0xd0 read Status Register
|
0xd0 read Status Register
|
||||||
0xd2 write Request Register
|
0xd2 write Request Register
|
||||||
0xd2 read -
|
0xd2 read -
|
||||||
0xd4 write Single Mask Register Bit
|
0xd4 write Single Mask Register Bit
|
||||||
0xd4 read -
|
0xd4 read -
|
||||||
0xd6 write Mode Register
|
0xd6 write Mode Register
|
||||||
0xd6 read -
|
0xd6 read -
|
||||||
0xd8 write Clear LSB/MSB Flip-Flop
|
0xd8 write Clear LSB/MSB Flip-Flop
|
||||||
0xd8 read -
|
0xd8 read -
|
||||||
0xda write Master Clear/Reset
|
0xda write Master Clear/Reset
|
||||||
0xda read Temporary Register
|
0xda read Temporary Register (Intel 82374には存在しない)
|
||||||
0xdc write Clear Mask Register
|
0xdc write Clear Mask Register
|
||||||
0xdc read -
|
0xdc read -
|
||||||
0xde write Write All Mask Register Bits
|
0xde write Write All Mask Register Bits
|
||||||
0xde read -
|
0xdf read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||||
|
0xdf read Read All Mask Register Bits
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
<sect2><heading>0x80 - 0x9f DMA ページレジスタ</heading>
|
<sect2><heading>0x80 - 0x9f DMA ページレジスタ</heading>
|
||||||
|
|
||||||
<p><verb>
|
<p><verb>
|
||||||
0x87 r/w DMA Channel 0
|
0x87 r/w Channel 0 Low byte (23-16) page Register
|
||||||
0x83 r/w DMA Channel 1
|
0x83 r/w Channel 1 Low byte (23-16) page Register
|
||||||
0x81 r/w DMA Channel 2
|
0x81 r/w Channel 2 Low byte (23-16) page Register
|
||||||
0x82 r/w DMA Channel 3
|
0x82 r/w Channel 3 Low byte (23-16) page Register
|
||||||
|
|
||||||
0x8b r/w DMA Channel 5
|
0x8b r/w Channel 5 Low byte (23-16) page Register
|
||||||
0x89 r/w DMA Channel 6
|
0x89 r/w Channel 6 Low byte (23-16) page Register
|
||||||
0x8a r/w DMA Channel 7
|
0x8a r/w Channel 7 Low byte (23-16) page Register
|
||||||
|
0x8f r/w Low byte page Refresh
|
||||||
0x8f Refresh
|
</verb>
|
||||||
|
|
||||||
|
<sect2><heading>0x400 - 0x4ff 82374 Enhanced DMA Registers</heading>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Intel 82374 EISA System Component (ESC)は1996年の初めに発表されました. この中
|
||||||
|
には機能的には8237のスーパーセットであり, 1つのパッケージの中にその他の
|
||||||
|
PC互換機のコアとなる周辺コンポーネントをも含んだDMAコントローラも含まれています.
|
||||||
|
このチップはEISAとPCI両方のプラットホームをターゲットにしたものであり,
|
||||||
|
scatter-gather I/O やリングバッファを始めとして, システムDMAをして32ビットの
|
||||||
|
アドレス空間全体に直接アクセスする能力も提供しています.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
これらの機能を使用する場合でも, 過去16年間のPC互換機で利用されてきた
|
||||||
|
同等機能を提供するコードも含めておく必要があります. 互換性の問題から, 82374の
|
||||||
|
レジスタの一部は, 従来の8237のレジスタをプログラムした<em>後</em>に,
|
||||||
|
転送の度にプログラムされる必要があります. 8237のレジスタに書き込みを行うとき,
|
||||||
|
ソフトウェアの下位互換性のために, 82374で追加された一部のレジスタの内容が
|
||||||
|
強制的に0にクリアされるからです.
|
||||||
|
|
||||||
|
|
||||||
|
<p><verb>
|
||||||
|
0x401 r/w Channel 0 High byte (bits 23-16) word count
|
||||||
|
0x403 r/w Channel 1 High byte (bits 23-16) word count
|
||||||
|
0x405 r/w Channel 2 High byte (bits 23-16) word count
|
||||||
|
0x407 r/w Channel 3 High byte (bits 23-16) word count
|
||||||
|
0x4c6 r/w Channel 5 High byte (bits 23-16) word count
|
||||||
|
0x4ca r/w Channel 6 High byte (bits 23-16) word count
|
||||||
|
0x4ce r/w Channel 7 High byte (bits 23-16) word count
|
||||||
|
|
||||||
|
0x487 r/w Channel 0 High byte (bits 31-24) page Register
|
||||||
|
0x483 r/w Channel 1 High byte (bits 31-24) page Register
|
||||||
|
0x481 r/w Channel 2 High byte (bits 31-24) page Register
|
||||||
|
0x482 r/w Channel 3 High byte (bits 31-24) page Register
|
||||||
|
0x48b r/w Channel 5 High byte (bits 31-24) page Register
|
||||||
|
0x489 r/w Channel 6 High byte (bits 31-24) page Register
|
||||||
|
0x48a r/w Channel 6 High byte (bits 31-24) page Register
|
||||||
|
0x48f r/w High byte page Refresh
|
||||||
|
|
||||||
|
0x4e0 r/w Channel 0 Stop Register (bits 7-2)
|
||||||
|
0x4e1 r/w Channel 0 Stop Register (bits 15-8)
|
||||||
|
0x4e2 r/w Channel 0 Stop Register (bits 23-16)
|
||||||
|
0x4e4 r/w Channel 1 Stop Register (bits 7-2)
|
||||||
|
0x4e5 r/w Channel 1 Stop Register (bits 15-8)
|
||||||
|
0x4e6 r/w Channel 1 Stop Register (bits 23-16)
|
||||||
|
0x4e8 r/w Channel 2 Stop Register (bits 7-2)
|
||||||
|
0x4e9 r/w Channel 2 Stop Register (bits 15-8)
|
||||||
|
0x4ea r/w Channel 2 Stop Register (bits 23-16)
|
||||||
|
0x4ec r/w Channel 3 Stop Register (bits 7-2)
|
||||||
|
0x4ed r/w Channel 3 Stop Register (bits 15-8)
|
||||||
|
0x4ee r/w Channel 3 Stop Register (bits 23-16)
|
||||||
|
0x4f4 r/w Channel 5 Stop Register (bits 7-2)
|
||||||
|
0x4f5 r/w Channel 5 Stop Register (bits 15-8)
|
||||||
|
0x4f6 r/w Channel 5 Stop Register (bits 23-16)
|
||||||
|
0x4f8 r/w Channel 6 Stop Register (bits 7-2)
|
||||||
|
0x4f9 r/w Channel 6 Stop Register (bits 15-8)
|
||||||
|
0x4fa r/w Channel 6 Stop Register (bits 23-16)
|
||||||
|
0x4fc r/w Channel 7 Stop Register (bits 7-2)
|
||||||
|
0x4fd r/w Channel 7 Stop Register (bits 15-8)
|
||||||
|
0x4fe r/w Channel 7 Stop Register (bits 23-16)
|
||||||
|
|
||||||
|
0x40a write Channels 0-3 Chaining Mode Register
|
||||||
|
0x40a read Channel Interrupt Status Register
|
||||||
|
0x4d4 write Channels 4-7 Chaining Mode Register
|
||||||
|
0x4d4 read Chaining Mode Status
|
||||||
|
0x40c read Chain Buffer Expiration Control Register
|
||||||
|
|
||||||
|
0x410 write Channel 0 Scatter-Gather Command Register
|
||||||
|
0x411 write Channel 1 Scatter-Gather Command Register
|
||||||
|
0x412 write Channel 2 Scatter-Gather Command Register
|
||||||
|
0x413 write Channel 3 Scatter-Gather Command Register
|
||||||
|
0x415 write Channel 5 Scatter-Gather Command Register
|
||||||
|
0x416 write Channel 6 Scatter-Gather Command Register
|
||||||
|
0x417 write Channel 7 Scatter-Gather Command Register
|
||||||
|
|
||||||
|
0x418 read Channel 0 Scatter-Gather Status Register
|
||||||
|
0x419 read Channel 1 Scatter-Gather Status Register
|
||||||
|
0x41a read Channel 2 Scatter-Gather Status Register
|
||||||
|
0x41b read Channel 3 Scatter-Gather Status Register
|
||||||
|
0x41d read Channel 5 Scatter-Gather Status Register
|
||||||
|
0x41e read Channel 5 Scatter-Gather Status Register
|
||||||
|
0x41f read Channel 7 Scatter-Gather Status Register
|
||||||
|
|
||||||
|
0x420-0x423 r/w Channel 0 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x424-0x427 r/w Channel 1 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x428-0x42b r/w Channel 2 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x42c-0x42f r/w Channel 3 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x434-0x437 r/w Channel 5 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x438-0x43b r/w Channel 6 Scatter-Gather Descripter Table Pointer Register
|
||||||
|
0x43c-0x43f r/w Channel 7 Scatter-Gather Descripter Table Pointer Register
|
||||||
</verb>
|
</verb>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue