Hi,
void init_I2C_for_codec_com() { CSL_Status status; status = I2C_config(&i2cConfig); i2cErrInTx = FALSE; /* Enable I2C NACK Error Event */ /* Enable I2C Tx Ready Event */ void Send_codec_commands_through_I2C(Uint16 *pSendBuffer) } /** /** /** /** /** /** /** eventId = I2C_getEventId();
/* Initialize I2C module */
status = I2C_init(CSL_I2C0);
if(status != CSL_SOK)
{
LOG_printf(&trace, "I2C Init Failed!!\n");
return;
}
/* Set the I2C call back function address */
i2cIsrAddr.alAddr = CSL_i2cAlCallback;
i2cIsrAddr.nackAddr = CSL_i2cNackCallback;
i2cIsrAddr.ardyAddr = CSL_i2cArdyCallback;
i2cIsrAddr.rrdyAddr = CSL_i2cRxCallback;
i2cIsrAddr.xrdyAddr = CSL_i2cTxCallback;
i2cIsrAddr.scdAddr = CSL_i2cScdCallback;
i2cIsrAddr.aasAddr = CSL_i2cAasCallback;
status = I2C_setCallback(&i2cIsrAddr);
if(status != CSL_SOK)
{
LOG_printf(&trace, "I2C Set callback Failed!!\n");
return;
}
/* Configure I2C module for write */
i2cConfig.icoar = CSL_I2C_ICOAR_DEFVAL;
i2cConfig.icimr = CSL_I2C_ICIMR_DEFVAL;
i2cConfig.icclkl = CSL_I2C_ICCLK_DEFVAL; // 35; //
i2cConfig.icclkh = CSL_I2C_ICCLK_DEFVAL; // 35; //
i2cConfig.iccnt = 20; //CSL_I2C_DATA_SIZE + CSL_EEPROM_ADDR_SIZE;
i2cConfig.icsar = CSL_I2C_CODEC_ADDR; // CSL_I2C_ICSAR_DEFVAL;
i2cConfig.icmdr = CSL_I2C_ICMDR_WRITE_DEFVAL;
i2cConfig.icemdr = CSL_I2C_ICEMDR_DEFVAL;
i2cConfig.icpsc = CSL_I2C_ICPSC_DEFVAL; // 0x0004; //
if(status != CSL_SOK)
{
LOG_printf(&trace, "I2C Config Failed!!\n");
return;
}
/* Read the configured values using I2C_getConfig function */
status = I2C_getConfig(&i2cGetConfig);
if(status != CSL_SOK)
{
LOG_printf(&trace, "I2C Get Config Failed!!\n");
return;
}
/* Verify the read configuration values */
if((i2cConfig.icoar != i2cGetConfig.icoar) ||
(i2cConfig.icimr != i2cGetConfig.icimr) ||
(i2cConfig.icclkl != i2cGetConfig.icclkl) ||
(i2cConfig.icclkl != i2cGetConfig.icclkh) ||
(i2cConfig.iccnt != i2cGetConfig.iccnt) ||
(i2cConfig.icsar != i2cGetConfig.icsar) ||
(i2cConfig.icmdr != i2cGetConfig.icmdr) ||
(i2cConfig.icemdr != i2cGetConfig.icemdr) ||
(i2cConfig.icpsc != i2cGetConfig.icpsc))
{
LOG_printf(&trace, "I2C get config not matching with config values!!\n");
return;
}
i2cTxCount = 0;
dataLength = i2cConfig.iccnt;
status = I2C_eventEnable(CSL_I2C_EVENT_NACK);
if(status != CSL_SOK)
{
LOG_printf(&trace, "I2C Event enable Failed!!\n");
return;
}
status = I2C_eventEnable(CSL_I2C_EVENT_ICXRDY);
if(status != CSL_SOK)
{
LOG_printf(&trace, "I2C Event enable Failed!!\n");
return;
}
}
{
gSendBuffer = pSendBuffer;
i2cTxCount = 0;
//CSL_I2C_0_REGS->ICDXR = gSendBuffer[i2cTxCount++];
/* Set the start bit */
CSL_I2C_SETSTART();
/**
* \brief I2C Arbitration loss callback
*
* \param None
*
* \return None
*/
void CSL_i2cAlCallback(void)
{
;
}
* \brief I2C No acknowledgement callback
*
* \param None
*
* \return None
*/
void CSL_i2cNackCallback(void)
{
i2cErrInTx = TRUE;
}
* \brief I2C Access ready callback
*
* \param None
*
* \return None
*/
void CSL_i2cArdyCallback(void)
{
;
}
* \brief I2C Receive ready callback
*
* \param None
*
* \return None
*/
void CSL_i2cRxCallback(void)
{
/*
gI2cRdBuf[i2cRxCount++] = CSL_I2C_0_REGS->ICDRR;
dataLength--;
*/
}
* \brief I2C Transmit ready callback
*
* \param None
*
* \return None
*/
void CSL_i2cTxCallback(void)
{
CSL_I2C_0_REGS->ICDXR = gSendBuffer[i2cTxCount++];
dataLength--;
}
* \brief I2C Stop condition detected callback
*
* \param None
*
* \return None
*/
void CSL_i2cScdCallback(void)
{
stopDetected = TRUE;
}
* \brief I2C Address as slave callback
*
* \param None
*
* \return None
*/
void CSL_i2cAasCallback(void)
{
;
}
* \brief I2C interrupt service routine
*
* \param None
*
* \return None
*/
void i2c_isr(void)
{
Uint16 eventId;
if(eventId != 0)
{
i2cHandle->I2C_isrDispatchTable[eventId - 1]();
}
}