uint8_t TwoWire::endTransmission(uint8_t sendStop) { uint8_t error = I2C_MASTER_ERR_NONE; if(TX_BUFFER_EMPTY) return 0; MAP_I2CMasterSlaveAddrSet(I2C_BASE, txAddress, false); MAP_I2CMasterDataPut(I2C_BASE, txBuffer[txReadIndex]); I2CTransact(I2C_MASTER_CMD_BURST_SEND_START); txReadIndex = (txReadIndex + 1) % BUFFER_LENGTH; while(!TX_BUFFER_EMPTY) { MAP_I2CMasterDataPut(I2C_BASE, txBuffer[txReadIndex]); I2CTransact(I2C_MASTER_CMD_BURST_SEND_CONT); txReadIndex = (txReadIndex + 1) % BUFFER_LENGTH; } if(sendStop) { I2CTransact(I2C_MASTER_CMD_BURST_SEND_STOP); } else { currentState = MASTER_TX; } /* Indicate that we are done transmitting */ transmitting = 0; return error; }
unsigned long I2CBufferWrite(unsigned char ucDevAddr, unsigned char *ucBuffer, unsigned long ulSize,unsigned char ucFlags) { unsigned long ulNdx; // Set I2C codec slave address MAP_I2CMasterSlaveAddrSet(I2CA0_BASE,ucDevAddr, false); // Write the first byte to the controller. MAP_I2CMasterDataPut(I2CA0_BASE,ucBuffer[0]); MAP_I2CMasterIntClearEx(I2CA0_BASE, I2C_INT_MASTER); if( ulSize == 1) { MAP_I2CMasterControl(I2CA0_BASE, I2C_MASTER_CMD_SINGLE_SEND); } else { // Continue the transfer. MAP_I2CMasterControl(I2CA0_BASE, I2C_MASTER_CMD_BURST_SEND_START); // Wait until the current byte has been transferred. while((MAP_I2CMasterIntStatusEx(I2CA0_BASE, false) & I2C_INT_MASTER) == 0) { } for(ulNdx=1; ulNdx < ulSize-1; ulNdx++) { // Write the next byte to the controller. MAP_I2CMasterDataPut(I2CA0_BASE,ucBuffer[ulNdx]); // Clear Master Interrupt MAP_I2CMasterIntClearEx(I2CA0_BASE, I2C_INT_MASTER); // Continue the transfer. MAP_I2CMasterControl(I2CA0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); // Wait until the current byte has been transferred. while((MAP_I2CMasterIntStatusEx(I2CA0_BASE, false) & I2C_INT_MASTER) == 0) { } } // Write the last byte to the controller. MAP_I2CMasterDataPut(I2CA0_BASE, ucBuffer[ulSize-1]); MAP_I2CMasterIntClearEx(I2CA0_BASE, I2C_INT_MASTER); // End the transfer. MAP_I2CMasterControl(I2CA0_BASE,I2C_MASTER_CMD_BURST_SEND_FINISH); } // Wait until the current byte has been transferred. while((MAP_I2CMasterIntStatusEx(I2CA0_BASE, false) & I2C_INT_MASTER) == 0) { } return 0; }
void I2C_WriteMultiBegin(unsigned char slaveAddress, unsigned char address, unsigned char data) { MAP_I2CMasterSlaveAddrSet(I2CBase, slaveAddress, false); MAP_I2CMasterDataPut(I2CBase, address); MAP_I2CMasterControl(I2CBase, I2C_MASTER_CMD_BURST_SEND_START); I2C_WaitForBus(I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); MAP_I2CMasterDataPut(I2CBase, data); MAP_I2CMasterControl(I2CBase, I2C_MASTER_CMD_BURST_SEND_CONT); I2C_WaitForBus(I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); }
void I2C_WriteMultiEnd(unsigned char data) { MAP_I2CMasterDataPut(I2CBase, data); MAP_I2CMasterControl(I2CBase, I2C_MASTER_CMD_BURST_SEND_FINISH); I2C_WaitForBus(I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); }
void ti_arm_mcu_i2c_reg_write(int port, unsigned char addr, unsigned char reg, const unsigned char *data, int len) { const ti_arm_mcu_i2c_t *i2c = &ti_arm_mcu_i2cs[port]; MAP_I2CMasterSlaveAddrSet(i2c->base, addr >> 1, 0); MAP_I2CMasterDataPut(i2c->base, reg); MAP_I2CMasterControl(i2c->base, I2C_MASTER_CMD_BURST_SEND_START); wait_for_completion(i2c->base); while (len--) { MAP_I2CMasterDataPut(i2c->base, *data++); if (len) { MAP_I2CMasterControl(i2c->base, I2C_MASTER_CMD_BURST_SEND_CONT); wait_for_completion(i2c->base); } } MAP_I2CMasterControl(i2c->base, I2C_MASTER_CMD_BURST_SEND_FINISH); wait_for_completion(i2c->base); }
unsigned long I2C_ReadMultiBegin(unsigned char slaveAddress, unsigned char address) { unsigned char data; MAP_I2CMasterSlaveAddrSet(I2CBase, slaveAddress, false); MAP_I2CMasterDataPut(I2CBase, address); MAP_I2CMasterControl(I2CBase, I2C_MASTER_CMD_BURST_SEND_START); I2C_WaitForBus(I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); MAP_I2CMasterSlaveAddrSet(I2CBase, slaveAddress, true); MAP_I2CMasterControl(I2CBase, I2C_MASTER_CMD_BURST_RECEIVE_START); I2C_WaitForBus(I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); data = MAP_I2CMasterDataGet(I2CBase); return data; }