AG903ライブラリリファレンス
内容インデックスホーム
Example

簡易ディスクリプタによる転送シーケンス(画像をクリックして拡大) 

 

<シーケンス説明>

  1. ハンドル取得。「AG903_DMACMgrGetHandle
  2. コールバック関数登録。「AG903_DMACMgrSetIntCallback
  3. 簡易転送用ディスクリプタ設定。「AG903_DMACMgrSetSimpleTrnsDesc
  4. DMAC実行。「AG903_DMACMgrEnable
  5. 転送完了でTerm割込み発生。(コールバック通知)
  6. ハンドル解放。「AG903_DMACMgrReleaseHandle

 

ディスクリプタリストによる転送シーケンス(画像をクリックして拡大) 

 

<シーケンス説明>

  1. ハンドル取得。「AG903_DMACMgrGetHandle
  2. コールバック関数登録。「AG903_DMACMgrSetIntCallback
  3. リモードディスクリプタ領域アドレス指定。「AG903_DMACMgrSetRemoteDescAddr
    • リモードディスクリプタ領域を使用しない場合は省略可能。
  4. 転送用ディスクリプタ設定。「AG903_DMACMgrSetDescList
  5. DMAC実行。「AG903_DMACMgrEnable
  6. ディスクリプタ転送完了でTerm割込み発生。(コールバック通知)
    • 設定したリスト数分コールバック。(TCMsk=0の場合)
  7. ハンドル解放。「AG903_DMACMgrReleaseHandle

 

ディスクリプタ設定例

  1. 転送元アドレスから転送先アドレスへの単純転送例
AG903_DMACMgrConfig config;
AG903_DMACMgrDesc desc;
config.val = 0;
desc.Ctrl.val = 0;
desc.SrcAddr = (uint32_t)srcaddr;
desc.DstAddr = (uint32_t)dstaddr;
desc.Trns.val = size;
desc.Stride.val = 0;
desc.next = NULL;
AG903_DMACMgrSetDescList(handle, &config, &desc, 1);
【動作】
  1. srcaddrから dstaddrに size分のデータが転送(コピー)されます。
 
  1. 転送先をペリフェラルのレジスタにした場合の例
AG903_DMACMgrConfig config;
AG903_DMACMgrDesc desc;
config.val = 0;
config.st.DstHEn = 1;
config.st.DstRS = source_select;
desc.Ctrl.val = 0;
desc.Ctrl.st.DstCtrl = 2; /* Fixed */
desc.SrcAddr = (uint32_t)srcaddr;
desc.DstAddr = (uint32_t)regaddr;
desc.Trns.val = size;
desc.Stride.val = 0;
desc.next = NULL;
AG903_DMACMgrSetDescList(handle, &config, &desc, 1);
【動作】
  1. srcaddrから regaddr に size分のデータが転送されます。
  2. desc.Ctrl.st.DstCtrl = 2としているので転送先アドレスは固定です。(インクリメントされません。)
  3. source_selectはハンドシェイクに使用するdma_req/dma_ackのペアを指定します。システムレジスタでペリフェラルインターフェース0~15のいずれかを設定し、その番号(0~15)を指定してください。
システムレジスタについては『AX51903仕様書』を参照してください。 
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.