/* Configure I2S for Audio Format input */
Status Chip_I2S_RxConfig(LPC_I2S_T *pI2S, I2S_AUDIO_FORMAT_T *format)
{
    uint32_t temp;
    uint16_t xDiv, yDiv;
    uint32_t N;

    if (getClkDiv(pI2S, format, &xDiv, &yDiv, &N) == ERROR) {
        return ERROR;
    }
    temp = pI2S->DAI & (~(I2S_DAI_WORDWIDTH_MASK | I2S_DAI_MONO | I2S_DAI_SLAVE | I2S_DAI_WS_HALFPERIOD_MASK));
    if (format->WordWidth <= 8) {
        temp |= I2S_WORDWIDTH_8;
    }
    else if (format->WordWidth <= 16) {
        temp |= I2S_WORDWIDTH_16;
    }
    else {
        temp |= I2S_WORDWIDTH_32;
    }

    temp |= (format->ChannelNumber) == 1 ? I2S_MONO : I2S_STEREO;
    temp |= I2S_MASTER_MODE;
    temp |= I2S_DAI_WS_HALFPERIOD(format->WordWidth - 1);
    pI2S->DAI = temp;
    pI2S->RXMODE = I2S_RXMODE_CLKSEL(0);
    pI2S->RXBITRATE = N - 1;
    pI2S->RXRATE = yDiv | (xDiv << 8);
    return SUCCESS;
}
Exemple #2
0
/* Set word select (WS) half period */
void IP_I2S_SetWS_Halfperiod(IP_I2S_001_Type *pI2S, uint8_t TRMode, uint32_t ws_halfperiod)
{
	if (TRMode == I2S_TX_MODE) {
		pI2S->DAO &= ~I2S_DAO_WS_HALFPERIOD_MASK;
		pI2S->DAO |= I2S_DAO_WS_HALFPERIOD(ws_halfperiod);
	}
	else {
		pI2S->DAI &= ~I2S_DAI_WS_HALFPERIOD_MASK;
		pI2S->DAI |= I2S_DAI_WS_HALFPERIOD(ws_halfperiod);
	}
}