I2C_M_SETUP_Type txsetup; txsetup.sl_addr7bit = addr; txsetup.tx_data = buf; txsetup.tx_length = len; txsetup.rx_data = NULL; txsetup.rx_length = 0; txsetup.retransmissions_max = 3; |
Status I2C_MasterTransferData(LPC_I2C_TypeDef *I2Cx, I2C_M_SETUP_Type *TransferCfg, \ I2C_TRANSFER_OPT_Type Opt) { uint8_t *txdat; uint8_t *rxdat; uint32_t CodeStatus; uint8_t tmp; // reset all default state txdat = (uint8_t *) TransferCfg->tx_data; rxdat = (uint8_t *) TransferCfg->rx_data; // Reset I2C setup value to default state TransferCfg->tx_count = 0; TransferCfg->rx_count = 0; TransferCfg->status = 0; if (Opt == I2C_TRANSFER_POLLING){ /* First Start condition -------------------------------------------------------------- */ TransferCfg->retransmissions_count = 0; retry: // reset all default state txdat = (uint8_t *) TransferCfg->tx_data; rxdat = (uint8_t *) TransferCfg->rx_data; // Reset I2C setup value to default state TransferCfg->tx_count = 0; TransferCfg->rx_count = 0; CodeStatus = 0; // Start command CodeStatus = I2C_Start(I2Cx); if ((CodeStatus != I2C_I2STAT_M_TX_START) \ && (CodeStatus != I2C_I2STAT_M_TX_RESTART)){ TransferCfg->retransmissions_count++; if (TransferCfg->retransmissions_count > TransferCfg->retransmissions_max){ // save status TransferCfg->status = CodeStatus; goto error; } else { goto retry; } } |
/*********************************************************************** * Function: I2C_Start * Purpose: Generate a start condition on I2C bus (in master mode only) * Parameters: * i2cdev: Pointer to I2C register * blocking: blocking or none blocking mode * Returns: value of I2C status register after generate a start condition **********************************************************************/ static uint32_t I2C_Start (LPC_I2C_TypeDef *I2Cx) { I2Cx->I2CONCLR = I2C_I2CONCLR_SIC; I2Cx->I2CONSET = I2C_I2CONSET_STA; // Wait for complete while (!(I2Cx->I2CONSET & I2C_I2CONSET_SI)); I2Cx->I2CONCLR = I2C_I2CONCLR_STAC; return (I2Cx->I2STAT & I2C_STAT_CODE_BITMASK); } |
LPC_SYSCON->SYSAHBCLKCTRL|=(1<<LPC_AHBCLK_I2C); |