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

データ送受信 (SPIモード用)

Syntax
C++
int32_t AG903_SSPMgrSpiSendReceive(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モードのときデータを全二重で送受信します。

送信と受信は同時に開始されます。 

原則としてtx_numとrx_numは同じサイズにしてください。 デバイスによりますが一般的に送信データの後半は受信待ちのためのダミー、受信データの前半はコマンド送信中のための無効なデータとして運用されます。 

この関数をSPIフラッシュ特化モードで使用した場合指定サイズでの送受信完了後も AG903_SSPMgrSpiDisableTransfer で停止するまで無効な送受信が継続します。 

SPIモード以外では使用できません。 

この関数は AG903_SSPMgrSpiEnableTransfer と組み合わせて使用します。 

この関数からは完全に転送が完了するまで戻りません。 AG903_SSPMgrSpiSendReceiveDma の使用を推奨します。 

転送完了時の AG903_SSPMgrSetCallback によるコールバックはRTOSのタスクモードで呼ばれます。 

データワードのビット長とシリアライズについては AG903_SSPMgrSetSendBuf での説明と同様です。

1: int32_t AG903_SSPMgrSpiSendReceive(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 = 0; 14: dma_rx_enable = 0; 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.