インテルのみ表示可能 — GUID: iga1401397708725
Ixiasoft
インテルのみ表示可能 — GUID: iga1401397708725
Ixiasoft
29.4.3. レジスターマップ
インテルで提供しているHALデバイスドライバーは、デバイスのレジスターに直接アクセスします。デバイスドライバーを作成しており、HALドライバーが同じデバイスに対してアクティブな場合は、ドライバーが競合し、作成したドライバーは正しく動作しません。
デバイスドライバーは、5つのメモリーマッピングされた32ビット・レジスターを介してハードウェアを制御し、ハードウェアと通信します。
オフセット | レジスター名 | 読み出し/書き込み | 31 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | status (1) | RW | (2) | LEN | WEOP | REOP | BUSY | DONE | |||||||||
1 | readaddress | RW | 読み出しマスターの開始アドレス | ||||||||||||||
2 | writeaddress | RW | 書き込みマスターの開始アドレス | ||||||||||||||
3 | length | RW | DMAトランザクション長 (バイト単位) | ||||||||||||||
4 | — | — | 予約済み (3) | ||||||||||||||
5 | — | — | 予約済み (3) | ||||||||||||||
6 | control | RW | (2) | SOFTWARERESET | QUADWORD | DOUBLEWORD | WCON | RCON | LEEN | WEEN | REEN | I_EN | GO | WORD | HW | BYTE | |
7 | — | — | 予約済み (3) | ||||||||||||||
注意
|
statusレジスター
statusレジスターは、DMAコントローラー内の状態を示す個々のビットで構成されます。statusレジスターはいつでも読み取ることができます。statusレジスターの読み出しで、レジスターの値は変化しません。
ビット番号 | ビット名 | 読み出し/書き込み/クリア | 説明 |
---|---|---|---|
0 | DONE | R/C | DMAトランザクションが完了しています。End of Packet条件が検出される、もしくは指定されているトランザクション長が完了すると、DONEビットが1に設定されます。statusレジスターに0を書き込み、DONEビットをクリアします。 |
1 | BUSY | R | DMAトランザクションが進行中の場合、BUSYビットは1になります。 |
2 | REOP | R | 読み出し側のEnd-of-Packetイベントによりトランザクションが完了すると、REOPビットが1になります。 |
3 | WEOP | R | 書き込み側のEnd-of-Packetイベントによりトランザクションが完了すると、WEOPビットが1になります。 |
4 | LEN | R | Lengthレジスターが0になると、LENビットが1に設定されます。 |
readaddressレジスター
readaddressレジスターは、DMAトランザクションで読み出される最初の位置を指定します。readaddressレジスターの幅はシステム生成時に決定します。幅は、読み出しポートがマスターとなるすべてのスレーブポートの全範囲に対応するのに十分な広さです。
writeaddressレジスター
writeaddressレジスターは、DMAトランザクションで書き込まれる最初の位置を指定します。writeaddressレジスターの幅はシステム生成時に決定します。幅は、書き込みポートがマスターとなるすべてのスレーブポートの全範囲に対応するのに十分な広さです。
lengthレジスター
lengthレジスターは、読み出しポートから書き込みポートに転送されるバイト数を指定します。lengthレジスターはバイト単位で指定します。例えば、ワード転送の場合は値を4の倍数にし、ハーフワード転送の場合は2の倍数にする必要があります。
lengthレジスターは、各データ値が書き込みマスターポートによって書き込まれるとデクリメントします。lengthが0に達すると、LENビットが設定されます。lengthレジスターは0より下にデクリメントしません。
lengthレジスターの幅はシステム生成時に決定します。幅は、少なくとも読み出しまたは書き込みマスターポートがマスターとなる任意のスレーブポートの広がりに十分な幅で、必要に応じてさらに広げることができます。
controlレジスター
controlレジスターは、DMAの内部動作を制御する個々のビットで構成されます。controlレジスターの値はいつでも読み取ることができます。controlレジスターのビットは、トランザクションの終了および割り込み要求をもたらすDMAトランザクションの条件を決定します。
ビット番号 | ビット名 | 読み出し/書き込み/クリア | 説明 |
---|---|---|---|
0 | BYTE | RW | バイト転送を指定します。 |
1 | HW | RW | ハーフワード (16ビット) 転送を指定します。 |
2 | WORD | RW | ワード (32ビット) 転送を指定します。 |
3 | GO | RW | DMAトランザクションを有効にします。アイドル段階 (実行開始前) にGOビットが0に設定されると、DMAで転送を実行することはできません。アイドル段階にGOビットが1に設定され、Lengthレジスターが0以外の場合は、転送が発生します。 書き込みトランザクションが完了する前にGOビットがLowにデアサートされた場合、DONEビットがHighになることはありません。GOビットは、アイドル (実行が発生していない) 段階にのみ変更することが推奨されます。 |
4 | I_EN | RW | 割り込み要求 (IRQ) を有効にします。I_ENビットが1の場合にステータスレジスターのDONEビットが1に設定されると、DMAコントローラーはIRQを生成します。I_ENビットが0の場合はIRQが無効になっています。 |
5 | REEN | RW | 読み出し側のEnd-of-Packetでトランザクションを終了します。REENビットが1に設定されている場合、読み出し側のフロー制御を備えるスレーブポートでは、End-of-Packet信号をアサートしてDMAトランザクションを終了することが可能です。REENビットは0に設定する必要があります。 |
6 | WEEN | RW | 書き込み側のEnd-of-Packetでトランザクションを終了します。WEENビットは0に設定する必要があります。 |
7 | LEEN | RW | lengthレジスターが0に達すると、トランザクションを終了します。このビットが0の場合、lengthが0に到達してもトランザクションは終了しません。その場合、DMAトランザクションは読み出しまたは書き込みマスターポートからのEnd-of-Packet信号で終了する必要があります。LEENビットは1に設定する必要があります。 |
8 | RCON | RW | 定数のアドレスから読み出します。RCONが0の場合、読み出しアドレスはデータ転送のたびにインクリメントします。これは、DMAコントローラーで一連のメモリーアドレスを読み出すメカニズムです。RCONが1の場合、読み出しアドレスはインクリメントしません。これは、DMAコントローラーでペリフェラルから一定のメモリーアドレスで読み出すメカニズムです。詳細は、アドレス指定とアドレス・インクリメントのセクションを参照してください。 |
9 | WCON | RW | 定数のアドレスに書き込みます。RCONビットと同様に、WCONが0の場合、書き込みアドレスはデータ転送のたびにインクリメントします。WCONが1の場合、書き込みアドレスはインクリメントしません。詳細は、アドレス指定とアドレス・インクリメントを参照してください。 |
10 | DOUBLEWORD | RW | ダブルワード転送を指定します。 |
11 | QUADWORD | RW | クワッドワード転送を指定します。 |
12 | SOFTWARERESET | RW | ソフトウェアでは、このビットに1を2回書き込むことにより、DMAエンジンをリセットできます。SOFTWARERESETビットへの2回目の1の書き込みで、DMAの制御はシステムリセットと同様にリセットされます。ソフトウェアのリセットプロセスをシーケンスにするロジックは、自動的にリセットされます。 |
DMAトランザクションのデータ幅は、BYTE、HW、WORD、DOUBLEWORD、QUADWORDビットで指定されます。これらのビットは、1つのみを一度に設定することができます。複数のビットが設定されている場合のDMAコントローラーの動作は未定義です。転送の幅は、読み書きされる2つのスレーブのうちの狭いスレーブによって決まります。例えば、16ビットのフラッシュメモリーから読み出し、32ビットのオンチップメモリーに書き込むDMAトランザクションでは、ハーフワード転送が必要です。この場合、HWを1に設定し、BYTE、WORD、DOUBLEWORD、QUADWORDを0に設定する必要があります。
特定の幅のトランザクションを正常に実行するには、ハードウェアでその幅を有効にしている必要があります。これには、Allowed Transactionハードウェア・オプションを使用します。例えば、ハードウェアでクワッドワード転送が無効になっている場合に、QUADWORDビットがDMAトランザクションで設定されると、DMAコントローラーの動作は未定義になります。
DMA転送がアクティブな際にDMAソフトウェアのリセットを実行すると、永続的なバスのロックアップ (次のシステムリセットまで) が発生する可能性があります。そのため、SOFTWARERESETビットには、最後の手段の場合を除いて書き込みを行わないでください。