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

受信バッファ設定 (PIO)

Syntax
C++
int32_t AG903_SSPMgrSetReceiveBuf(AG903_SSPMgrHandle* handle, uint8_t* buf, uint32_t size);
引数 
説明 
AG903_SSPMgrHandle* handle 
[in] SSPハンドル 
uint8_t* buf 
[in] 格納先頭アドレス 
uint32_t size 
[in] 受信サイズ(単位[Word] 下記参照) 

受信バッファ設定 (PIO)結果

返値の詳細 
説明 
正常終了 
-AG903_EINVAL 
引数異常 
-AG903_EBUSY 
ハンドル使用中(キューイング数がMAX) 
-AG903_EPERM 
状態異常(DMA有効状態) 

受信バッファの設定をします。 

 

データはWord単位でシリアライズされて受信されます。 

Wordのビット長、シリアライズのビットシフトの方向等は別途モード設定に従います。 Wordのビット長は各モード設定APIで設定したwordlenになります。 

データはコピーせずに指定アドレスから順に直接受信します。 

サイズ分の受信終了までバッファを保持して下さい。 

Wordのビット長が8の倍数でない場合、次のWordはバッファ上では バイト単位で切り上げたアドレスへ受信されます。 

Wordのビット長が32ビットに満たない場合は右詰めになります。

1: int32_t AG903_SSPMgrSetReceiveBuf(AG903_SSPMgrHandle* handle, uint8_t* buf, uint32_t size) 2: { 3: AG903_SSPMgrQue que; 4: int32_t retval = AG903_ENONE; 5: uint32_t status; 6: uint32_t div; 7: uint8_t enable; 8: uint8_t ch; 9: 10: retval = SSPMgr_CheckHandle(handle, &ch); 11: if(AG903_ENONE != retval) { 12: return -AG903_EINVAL; 13: } 14: if((NULL == buf) || (0 >= size)) { 15: return -AG903_EINVAL; 16: } 17: if(0 != SspChStat[ch].dma) { 18: return -AG903_EPERM; 19: } 20: 21: div = SspChStat[ch].wordlen / 8; 22: if(0 != (SspChStat[ch].wordlen%8)) { 23: div++; 24: } 25: 26: do { 27: que.size = size*div; 28: que.buf = buf; 29: retval = SSPMgr_SetRxQue(ch, &que); 30: if(AG903_ENONE != retval) { 31: break; 32: } 33: 34: if(AG903_SSP_ENABLE_RECEIVE & SspChStat[ch].pio) { 35: break; 36: } 37: 38: retval = SSPMgr_GetRxData(ch, true); 39: if(AG903_ENONE != retval) { 40: break; 41: } 42: SspChStat[ch].pio |= AG903_SSP_ENABLE_RECEIVE; 43: AG903_SSPPrmSetRxFifoThreshold(ch, AG903_SSP_RXFIFO_THRESHOLD); 44: 45: AG903_SSPPrmCheckEnable(ch, &enable); 46: if(0 == enable) { 47: AG903_SSPPrmGetIntStatus(ch, &status); 48: } 49: else { 50: AG903_SSPPrmEnableRxInt(ch); 51: } 52: }while(0); 53: 54: return retval; 55: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.