工具与软件:
您好... 我正在尝试通过 I2C 将16位数据写入特定的寄存器地址。 IAM 在将数据写入寄存器时未收到任何错误。 然后、我从该寄存器读回它、其值没有更改。 这是我的代码片段。
请提供帮助。 提前感谢。
void I2C_WriteRegister (uint8_t regAddress、uint8_t * data、uint8_t length){
MAP_I2CMasterSlaveAddrSet (I2C3_BASE、SLAVE_ADDRESS、FALSE);
MAP_I2CMasterDataPut (I2C3_BASE、regAddress);
MAP_I2CMasterControl (I2C3_BASE、I2C_MASTER_CMD_BURST_SEND_START);
timeoutCounter = 0;
while (MAP_I2CMasterBusy (I2C3_BASE)){
MAP_SysCtlDelay (1000);
if (++timeoutCounter > timeout){
UARTprintf ("transfer timeout\n");
返回;
}
}
if (MAP_I2CMasterErr (I2C3_BASE)!= I2C_MASTER_ERR_NONE){
UARTprintf ("transfer error\n");
返回;
}
对于(uint8_t i = 0;i < length;i++){
MAP_I2CMasterDataPut (I2C3_BASE、DATA[i]);
如果(i == length - 1){
MAP_I2CMasterControl (I2C3_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH);
其他{
MAP_I2CMasterControl (I2C3_BASE、I2C_MASTER_CMD_BURST_SEND_CONT);
}
timeoutCounter = 0;
while (MAP_I2CMasterBusy (I2C3_BASE)){
MAP_SysCtlDelay (1000);
if (++timeoutCounter > timeout){
UARTprintf ("transfer timeout\n");
返回;
}
}
if (MAP_I2CMasterErr (I2C3_BASE)!= I2C_MASTER_ERR_NONE){
UARTprintf ("transfer error\n");
返回;
}
}
}
int main(){
...
uint8_t writeData[2]={0xFF、0xFF};
I2C_WriteRegister (registerAddress、writeData、2);
UARTprintf ("写入寄存器0x%02x:0x%02x 0x%02x\n"、registerAddress、writeData[0]、writeData[1]);
.
}