Other Parts Discussed in Thread: TLV320AIC3106
Tool/software: Code Composer Studio
Hi,
My application needs to receive and send data to and from an audio codec TLV320AIC3106. I have configured I2S in CPU mode and could successfully read audio data from codec but unable to send data to codec. I probed an oscilloscope and there is no signal in I2S data out line. When I use I2SDataPut(I2S_BASE,I2S_STS_XDATA,ulDummy) the program gets stuck. Below is the I2S initialization code and I2S handler code and pinmux configuration. I am also attaching the schematic for you guys to make sure the pinmux configuration is correct.
void I2SIntHandler(void) { unsigned long ulStatus; // Get the interrupt status ulStatus = I2SIntStatus(I2S_BASE); // Check if there was a Transmit interrupt; if so write next data into the tx buffer and acknowledge // the interrupt if(ulStatus & I2S_STS_XDATA) { I2SDataPutNonBlocking(I2S_BASE,I2S_DATA_LINE_0,ulDummy); // replaced ulDummy with 0x55 to see whether anything is coming,but no result I2SIntClear(I2S_BASE,I2S_STS_XDATA); } // Check if there was a receive interrupt; if so read the data from the rx buffer and acknowledge // the interrupt if(ulStatus & I2S_STS_RDATA) { I2SDataGetNonBlocking( I2S_BASE, I2S_DATA_LINE_1,&ulDummy); I2SIntClear(I2S_BASE,I2S_STS_RDATA); audio_data_buffer[i2s_handler_index++]=ulDummy; if(i2s_handler_index>=320){ // checking for 320 samples i2s_handler_index=0; i2sdatarecvdflag=1; } } } /* //Initialize the I2S peripheral */ void AudioCaptureRendererConfigure(unsigned char bitsPerSample, unsigned short bitRate, unsigned char noOfChannels, unsigned char RxTx, unsigned char dma) { unsigned long bitClk; // Initialising the McASP // MAP_PRCMPeripheralClkEnable(PRCM_I2S,PRCM_RUN_MODE_CLK); PRCMPeripheralReset(PRCM_I2S); bitClk = bitsPerSample * bitRate * noOfChannels; dma=1; if(bitsPerSample == 16) { MAP_PRCMI2SClockFreqSet((bitClk*10)); //(bitClk*10));//512000); (I2S_BASE,(bitClk*10),bitClk,I2S_SLOT_SIZE_16| MAP_I2SConfigSetExpClk(I2S_BASE,(bitClk*10),bitClk,I2S_SLOT_SIZE_16| I2S_PORT_CPU); //(I2S_BASE,512000,bitClk,I2S_SLOT_SIZE_16| } MAP_I2SIntRegister(I2S_BASE, I2SIntHandler); MAP_I2SIntEnable(I2S_BASE,I2S_INT_XDATA); MAP_I2SIntEnable(I2S_BASE,I2S_INT_RDATA); if(RxTx == I2S_MODE_RX_TX) { I2SSerializerConfig(I2S_BASE,I2S_DATA_LINE_1,I2S_SER_MODE_RX, I2S_INACT_LOW_LEVEL); } if(RxTx & I2S_MODE_TX) { I2SSerializerConfig(I2S_BASE,I2S_DATA_LINE_0,I2S_SER_MODE_TX, I2S_INACT_LOW_LEVEL); } if(RxTx == I2S_MODE_RX_TX) { MAP_I2SEnable(I2S_BASE,I2S_MODE_TX_RX_SYNC); } else if(RxTx & I2S_MODE_TX) { MAP_I2SEnable(I2S_BASE,I2S_MODE_TX_ONLY); } } void PinMuxConfig(void) { // Initialising the McASP // MAP_PRCMPeripheralClkEnable(PRCM_I2S,PRCM_RUN_MODE_CLK); PRCMPeripheralReset(PRCM_I2S); MAP_PinTypeI2S(PIN_64, PIN_MODE_7); //PIN_MODE_7 MAP_PinTypeI2S(PIN_62, PIN_MODE_13); MAP_PinTypeI2S(PIN_63, PIN_MODE_7); MAP_PinTypeI2S(PIN_50, PIN_MODE_6); }
Thanks & regards,
Vishnu Pradeep