Part Number:MSPM0G3507
uint8_t I2C_WriteReg(uint8_t DevAddr,uint8_t reg_addr, uint8_t *reg_data, uint8_t count)
{
uint8_t I2Ctxbuff[8] = {0x00};
I2Ctxbuff[0] = reg_addr;
uint8_t i, j = 1;
for (i = 0; i < count; i++) {
I2Ctxbuff[j] = reg_data[i];
j++;
}
DL_I2C_fillControllerTXFIFO(I2C_INST, &I2Ctxbuff[0], count + 1);/*将数据传输到i2c总线*/
while (!(DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));/*等待i2c空闲*/ DL_I2C_startControllerTransfer(I2C_INST, DevAddr,DL_I2C_CONTROLLER_DIRECTION_TX, count + 1);/*将数据发送给目标设备*/
while (DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);/*获取i2c总线状态*/
while (!(DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));/*等待i2c空闲*/ DL_I2C_startControllerTransfer(I2C_INST, DevAddr,DL_I2C_CONTROLLER_DIRECTION_RX, 1);/*将数据发送给目标设备*/
DL_I2C_flushControllerTXFIFO(I2C_INST);/*清空tx缓冲区*/
return 0;
}
uint8_t I2C_ReadReg(uint8_t DevAddr,uint8_t reg_addr, uint8_t *reg_data, uint8_t count)
{ uint8_t I2Ctxbuff[8] = {0x00};
I2Ctxbuff[0] = reg_addr;
uint8_t i, j = 1;
for (i = 0; i < count; i++) {
I2Ctxbuff[j] = 0;
j++;
}
DL_I2C_fillControllerTXFIFO(I2C_INST, &I2Ctxbuff[0], count + 1);/*将数据传输到i2c总线*/
while (!(DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));/*等待i2c空闲*/ DL_I2C_startControllerTransfer(I2C_INST, DevAddr,DL_I2C_CONTROLLER_DIRECTION_TX, count + 1);/*将数据发送给目标设备*/
while (DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);/*获取i2c总线状态*/
while (!(DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));/*等待i2c空闲*/ DL_I2C_flushControllerTXFIFO(I2C_INST);/*清空tx缓冲区*/
DL_I2C_startControllerTransfer(I2C_INST, DevAddr, DL_I2C_CONTROLLER_DIRECTION_RX, count);/*给目标设备发送读请求*/
for (uint8_t i = 0; i < count; i++) {
while (DL_I2C_isControllerRXFIFOEmpty(I2C_INST));/*接收缓冲区为空的话*/ reg_data[i] = DL_I2C_receiveControllerData(I2C_INST);/*接收设备返回数据*/
}
return 0;
}
读写寄存器存在接收缓冲区一直为空的情况
Vivian Gao:
感谢您对TI产品的关注! 关于你的咨询,我们正在确认你的问题,稍后回复您。
,
Alice:
您好,
请直接参考MSPM0 SDK中的I2C示例。
TI中文支持网


