AG903ライブラリリファレンス
内容インデックスホーム
Body Source
本文ソース
1: int32_t AG903_SSPMgrSetI2sMode(AG903_SSPMgrHandle* handle, AG903_SSPMgrI2sParam* param) 2: { 3: AG903_SSPPrmCtrl ctrl = {0}; 4: int32_t retval = AG903_ENONE; 5: _Bool idle; 6: uint8_t ch; 7: 8: retval = SSPMgr_CheckHandle(handle, &ch); 9: if(AG903_ENONE != retval) { 10: return -AG903_EINVAL; 11: } 12: if(NULL == param) { 13: return -AG903_EINVAL; 14: } 15: if( (AG903_SSP_SDL_MAX < param->wordlen) || 16: (AG903_SSP_SSPDIV_MIN > param->clkdiv) || 17: (0x01 & param->clkdiv) || 18: (AG903_SSP_POL_TYPENUM <= param->polarity) || 19: (AG903_SSP_FIRSTBIT_TYPENUM <= param->firstbit) || 20: (AG903_SSP_JUSTIFIED_TYPENUM <= param->justified) ) { 21: return -AG903_EINVAL; 22: } 23: idle = SSPMgr_CheckIdle(ch); 24: if(true != idle) { 25: return -AG903_EBUSY; 26: } 27: 28: ctrl.format = AG903_SSP_FORMAT_I2S; 29: ctrl.fsdist = 1; 30: if(AG903_SSP_FIRSTBIT_LSB == param->firstbit) { 31: ctrl.lsb = 1; 32: } 33: if(AG903_SSP_POL_NEGATIVE == param->polarity) { 34: ctrl.fspo = 1; 35: } 36: if(AG903_SSP_RIGHT_JUSTIFIED == param->justified) { 37: ctrl.fsjstfy = 1; 38: } 39: if(true == param->slave) { 40: if(true == param->mono) { 41: ctrl.opm = AG903_SSP_OPM_SLAVE; 42: } 43: else { 44: ctrl.opm = AG903_SSP_OPM_SLAVE_STEREO; 45: } 46: } 47: else { 48: if(true == param->mono) { 49: ctrl.opm = AG903_SSP_OPM_MASTER; 50: } 51: else { 52: ctrl.opm = AG903_SSP_OPM_MASTER_STEREO; 53: } 54: } 55: ctrl.sdl = param->wordlen-1; 56: ctrl.pdl = param->padlen; 57: ctrl.sclk_div = (param->clkdiv>>1)-1; 58: 59: AG903_SSPPrmSetControl(ch, &ctrl); 60: 61: SspChStat[ch].format = AG903_SSP_FORMAT_I2S; 62: SspChStat[ch].wordlen = param->wordlen; 63: SspChStat[ch].slave = param->slave; 64: SspChStat[ch].tx_thod = AG903_SSP_TXFIFO_THRESHOLD; 65: SspChStat[ch].rx_thod = AG903_SSP_RXFIFO_THRESHOLD; 66: 67: return retval; 68: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.