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

SPIモード設定

Syntax
C++
int32_t AG903_SSPMgrSetSpiMode(AG903_SSPMgrHandle* handle, AG903_SSPMgrSpiParam* param);
引数 
説明 
AG903_SSPMgrHandle* handle 
[in] SSPハンドル 
AG903_SSPMgrSpiParam* param 
[in] 設定パラメータ 

SPIモード設定結果

返値の詳細 
説明 
正常終了 
-AG903_EINVAL 
引数異常 
-AG903_EBUSY 
ハンドル使用中 

通信フォーマットをSPIに設定します。 

param に従い通信の各パラメータを設定します。

1: int32_t AG903_SSPMgrSetSpiMode(AG903_SSPMgrHandle* handle, AG903_SSPMgrSpiParam* param) 2: { 3: AG903_SSPPrmCtrl ctrl = {0}; 4: AG903_SSPPrmCtrl2 ctrl2; 5: int32_t retval = AG903_ENONE; 6: _Bool idle; 7: uint8_t ch; 8: 9: retval = SSPMgr_CheckHandle(handle, &ch); 10: if(AG903_ENONE != retval) { 11: return -AG903_EINVAL; 12: } 13: if(NULL == param) { 14: return -AG903_EINVAL; 15: } 16: if( (AG903_SSP_SDL_MAX < param->wordlen) || 17: (AG903_SSP_SPIDIV_MIN > param->clkdiv) || 18: (0x01 & param->clkdiv) || 19: (AG903_SSP_POL_TYPENUM <= param->polarity) || 20: (AG903_SSP_FIRSTBIT_TYPENUM <= param->firstbit) || 21: (AG903_SSP_SPICLK_MODENUM <= param->sclktype) ){ 22: return -AG903_EINVAL; 23: } 24: idle = SSPMgr_CheckIdle(ch); 25: if(true != idle) { 26: return -AG903_EBUSY; 27: } 28: 29: ctrl.format = AG903_SSP_FORMAT_SPI; 30: if (param->flash) { 31: ctrl.spi_flash = 1; 32: } 33: if(AG903_SSP_FIRSTBIT_LSB == param->firstbit) { 34: ctrl.lsb = 1; 35: } 36: if(AG903_SSP_POL_NEGATIVE == param->polarity) { 37: ctrl.spi_fspo = 0; 38: } 39: if(true == param->slave) { 40: ctrl.opm = AG903_SSP_OPM_SLAVE; 41: } 42: else { 43: ctrl.opm = AG903_SSP_OPM_MASTER; 44: } 45: switch(param->sclktype) { 46: case AG903_SSP_SPICLK_MODE0: 47: ctrl.sclkpo = 0; 48: ctrl.sclkph = 0; 49: break; 50: case AG903_SSP_SPICLK_MODE1: 51: ctrl.sclkpo = 0; 52: ctrl.sclkph = 1; 53: break; 54: case AG903_SSP_SPICLK_MODE2: 55: ctrl.sclkpo = 1; 56: ctrl.sclkph = 0; 57: break; 58: case AG903_SSP_SPICLK_MODE3: 59: ctrl.sclkpo = 1; 60: ctrl.sclkph = 1; 61: break; 62: default: 63: 64: break; 65: } 66: ctrl.sdl = param->wordlen-1; 67: ctrl.sclk_div = (param->clkdiv>>1)-1; 68: 69: AG903_SSPPrmSetControl(ch, &ctrl); 70: 71: AG903_SSPPrmGetControl2(ch, &ctrl2); 72: ctrl2.fsos = 0; 73: ctrl2.fs = (AG903_SSP_POL_NEGATIVE==param->polarity) ? 1 : 0; 74: AG903_SSPPrmSetControl2(ch, &ctrl2); 75: 76: SspChStat[ch].format = AG903_SSP_FORMAT_SPI; 77: SspChStat[ch].wordlen = param->wordlen; 78: SspChStat[ch].slave = param->slave; 79: SspChStat[ch].tx_thod = AG903_SSP_TXFIFO_THRESHOLD; 80: SspChStat[ch].rx_thod = AG903_SSP_RXFIFO_THRESHOLD; 81: 82: SspSpiParam[ch] = *param; 83: 84: return retval; 85: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.