DMA


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

DMA (Direct Memory Access)

DMAとは、CPUを介さずデバイスが直接メモリ(アドレスバス)にアクセスするための機構です。

DSでは、CPUごとに4つずつ、合計8個のDMAチャンネルがあります。
DMAにアクセスする方法はGBAと似ていますが、1箇所、gamepakビット(bit27)だけが変更になっています。この部分は、ARM7では無くなり、ARM9では3bitに拡張されています。

  • ARM9 DMA
全てのチャンネルの長さは21ビットです。(最大で 1 ~ 1FFFFFh ユニットで、0 = 200000h です)
SAD/DAD レジスタの幅は 0 ~ 0FFFFFFEh です。

転送モード ( DMACNT Bit27-29 で設定する ) :
0 即時転送
1 V-Blank 時にスタート
2 H-Blank 時にスタート (V-Blank中は停止)
3 表示開始と同期
4 メインメモリ表示
5 DS カートリッジスロット
6 GBA カートリッジスロット
7 ジオメトリコマンド FIFO

SAD(転送元アドレス) と DAD(転送先アドレス) は読み書き可能です。
どちらとも、GBAモードでは制限を受けます(最大 4000h か 10000h ユニット。アドレスは 0 ~ 07FFFFFEh の間に制限される)。
DMACNT Bit27 はARM7では使用しません。

転送モード ( DMACNT Bit28-29 で設定する ) :
0 即時転送
1 V-Blank 時にスタート
2 DS カートリッジスロット
3 DMA0/DMA2: ワイヤレス割り込み, DMA1/DMA3: GBA カートリッジスロット


  • 40000E0h - ARM9 のみ - DMA0FILL - DMA 0 Filldata (R/W)
  • 40000E4h - ARM9 のみ - DMA1FILL - DMA 1 Filldata (R/W)
  • 40000E8h - ARM9 のみ - DMA2FILL - DMA 2 Filldata (R/W)
  • 40000ECh - ARM9 のみ - DMA3FILL - DMA 3 Filldata (R/W)
Bit0-31 Filldata

DMAフィルデータレジスタは16バイトのWRAMを持っていて、DMA転送処理時のソースアドレスとして使用されます。
DMAはTCM(CPUコアに入ったメモリ?)を読み込むことができなかったり、メインRAM アクセス時にはリソースキャッシュや書き込みバッファがあるので、こういった方法を使用します。

  • ARM7 サウンド DMA
DSは、この他に16個のサウンド用DMAチャンネルと、2個のサウンドキャプチャ用DMAを持っています。
これらのチャンネルの優先順位はまだ分かりません。

  • ARM9 キャッシュ, 書き込みバッファ, DTCM と ITCM
キャッシュとTCMはARM9へ、システムバスを通さずに直接接続されています。
なので DMA は DTCM/ITCM にアクセスできません。キャッシュメモリ領域にはアクセスすることができますが、注意する必要があります。
キャッシュメモリ領域にアクセスするには、DMA 読み込みの前に書き込みバッファを繋ぎ、DMA 書き込みの後にキャッシュを無効にしてください。


DMA転送中にも、TCMやキャッシュの中にあるコードを読み込ませることでCPUを動かすことができます。TCMとキャッシュ中にコードが無い場合はDMA転送が終わるまでCPUはhalt状態になります。
DMA転送中に割り込みが発生した時、CPUは停止します。
(TCMとキャッシュにIRQハンドラが存在しない場合 - IRQベクタFFFF00xxhがキャッシュされていない、かつ ITCM の 000000xxh にも移されていない状態 - や、IRQハンドラがIE・IF・他のIOポートにアクセスする場合に停止します)

  • DS シーケンシャルメインメモリ DMA
メインRAMはシーケンシャルアクセスか、そうでないかによってアクセス時間が違います。
通常、DMAはシーケンシャルアクセスを使用します(最初の1ワードを除いて)。
ただし、転送元と転送先が両方ともメインRAMである場合、全てのアクセスはシーケンシャルではなくなります。
そのような時、2つのDMAユニットを使った転送を高速化するには、片方がメインRAMからWRAMへ転送し、もう片方がWRAMからメインRAMへ転送するようにします。




ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。