AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
AG903_DMACMgrSetDescList 関数

ディスクリプタ設定

Syntax
C++
int32_t AG903_DMACMgrSetDescList(AG903_DMACMgrHandle * handle, AG903_DMACMgrConfig * config, AG903_DMACMgrDesc * desc_list, int list_num);
引数 
説明 
AG903_DMACMgrHandle * handle 
[in] DMACハンドル 
AG903_DMACMgrConfig * config 
[in] コンフィグ設定 
AG903_DMACMgrDesc * desc_list 
[in] ディスクリプタリスト 
int list_num 
[in] ディスクリプタリスト数 

エラーコード

返値の詳細 
説明 
正常終了 
-AG903_EINVAL 
パラメータ異常 
-AG903_EBUSY 
実行中 
-AG903_ENOBUFS 
ディスクリプタ保存先不足 

ディスクリプタ設定 

ディスクリプタリストの設定はAG903仕様書(AX51903_DSxx.pdf)のレジスタ編を参照して下さい。

ディスクリプタリストは転送完了ごとに再設定する必要があります。 

この関数は割り込みコールバックの中で使用することができます。 ただしその場合引数のディスクリプタリストはstaticな変数として下さい。 割り込みコールバックの中でなければ関数から戻った後に破棄することができます。 

この関数はディスクリプタリストを使った転送が行われているとき実行禁止です。 

ディスクリプタリストはDMACMgrハンドラ間で排他的にアクセスして下さい。

1: int32_t AG903_DMACMgrSetDescList(AG903_DMACMgrHandle *handle, AG903_DMACMgrConfig *config, 2: AG903_DMACMgrDesc *desc_list, int list_num) 3: { 4: uint32_t unit = ((AG903_DMACMgrHandleStat*)handle - handle_list); 5: uint8_t enable; 6: 7: if(unit >= AG903_DMAC_UNIT_NUM || &handle_list[unit] != (AG903_DMACMgrHandleStat*)handle || 8: NULL == config || NULL == desc_list || 0 == list_num) 9: { 10: return -AG903_EINVAL; 11: } 12: 13: 14: enable = DMACMgr_CheckEnable(unit); 15: if(true == enable) { 16: return -AG903_EBUSY; 17: } 18: 19: if(false == initdesc) { 20: initdesc = true; 21: AG903_DMACPrmSetLOCAL_DESC_MEM_BASE(LOCAL_DESC_MEM_ADDR); 22: } 23: DMACPrmParamCFG cfg = { 24: .TCIntMsk = config->st.TCIntMsk, 25: .ErrIntMsk = config->st.ErrIntMsk, 26: .AbtIntMsk = config->st.AbtIntMsk, 27: .SrcRS = config->st.SrcRS, 28: .SrcHEn = config->st.SrcHEn, 29: .DstRS = config->st.DstRS, 30: .DstHEn = config->st.DstHEn, 31: .LLPCnt = config->st.LLPCnt, 32: .ChGntWin = config->st.ChGntWin, 33: .ChPri = config->st.ChPri, 34: .WOMode = config->st.WOMode, 35: .UnalignMode = config->st.UnalignMode, 36: }; 37: AG903_DMACPrmSetCFG_REG(unit, &cfg); 38: 39: return set_desc_entry((AG903_DMACMgrHandleStat*)handle, desc_list, list_num); 40: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.