44 lines
1.2 KiB
C
44 lines
1.2 KiB
C
#include "imsensors/sensors_common.h"
|
|
|
|
/* SDK drivers */
|
|
#include "fsl_i2c.h"
|
|
|
|
ims_ret_t sensors_impl_i2c_xfer(void *pdev, uint16_t addr, ims_i2c_xfer_desc_t *xfer) {
|
|
if (xfer->tx_size > 0) {
|
|
if (I2C_MasterStart(I2C0, addr, kI2C_Write) != kStatus_Success) {
|
|
return IMS_FAIL;
|
|
}
|
|
|
|
if (I2C_MasterWriteBlocking(I2C0, xfer->tx_data, xfer->tx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
|
|
return IMS_FAIL;
|
|
}
|
|
}
|
|
|
|
if (xfer->rx_size > 0) {
|
|
if (xfer->tx_size > 0) {
|
|
if (I2C_MasterRepeatedStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
|
|
return IMS_FAIL;
|
|
}
|
|
} else {
|
|
if (I2C_MasterStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
|
|
return IMS_FAIL;
|
|
}
|
|
}
|
|
|
|
if (I2C_MasterReadBlocking(I2C0, xfer->rx_data, xfer->rx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
|
|
return IMS_FAIL;
|
|
}
|
|
}
|
|
|
|
if (I2C_MasterStop(I2C0) != kStatus_Success) {
|
|
return IMS_FAIL;
|
|
}
|
|
|
|
return IMS_SUCCESS;
|
|
}
|
|
|
|
ims_ret_t sensors_impl_delay(void *pdev, uint32_t msec) {
|
|
SDK_DelayAtLeastUs(msec * 20);
|
|
|
|
return IMS_SUCCESS;
|
|
} |