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

DMAによるデータ送受信 (SPIモード用)

Syntax
C++
int32_t AG903_SSPMgrSpiSendReceiveDma(AG903_SSPMgrHandle* handle, const void* tx_buf, uint32_t tx_num, void * rx_buf, uint32_t rx_num);
引数 
説明 
AG903_SSPMgrHandle* handle 
[in] SSPハンドル 
const void* tx_buf 
[in] データ送信先頭アドレス 
uint32_t tx_num 
[in] 送信サイズ(単位[Word] 下記参照) 
void * rx_buf 
[in] データ受信先頭アドレス 
uint32_t rx_num 
[in] 受信サイズ(単位[Word] 下記参照) 

送信結果

返値の詳細 
説明 
正常終了 
-AG903_EINVAL 
引数異常 
-AG903_EPERM 
状態異常 (SPIモードではない等) 

SPIモードのときDMAによりデータを全二重で送受信します。

DMAによる転送は AG903_SSPMgrAttachTxDma または AG903_SSPMgrAttachRxDma でDMAが取り付けられている転送方向に対してのみ有効です。 

DMAが取り付けられていない転送方向に対してはCPU転送になります。 

この関数のDMAはライブラリ内部から制御されユーザーが外部から制御することはできません。 

送信と受信の両方にDMAが取り付けられている場合は転送開始後直ちに戻ります。 少なくともどちらか片方にDMAが取り付けられていない場合は完全に転送が完了するまで戻りません。 

転送完了時に AG903_SSPMgrSetCallback によりコールバックされるとき DMAが取り付けられていない転送方向に対してはRTOSのタスクモードで呼ばれます。 

その他の仕様は AG903_SSPMgrSpiSendReceive と同様です。

1: int32_t AG903_SSPMgrSpiSendReceiveDma(AG903_SSPMgrHandle* handle, const void* tx_buf, uint32_t tx_num, void *rx_buf, uint32_t rx_num) 2: { 3: int32_t retval = AG903_ENONE; 4: uint8_t ch; 5: uint8_t dma_tx_enable; 6: uint8_t dma_rx_enable; 7: 8: retval = SSPMgr_CheckHandle(handle, &ch); 9: if(AG903_ENONE != retval) { 10: return -AG903_EINVAL; 11: } 12: 13: dma_tx_enable = 1; 14: dma_rx_enable = 1; 15: retval = SSPMgr_SpiSendReceiveTemplate(ch, tx_buf, tx_num, rx_buf, rx_num, dma_tx_enable, dma_rx_enable); 16: 17: return retval; 18: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.