主题中讨论的其他器件:OPT3001
我目前正在使用 Tiva C 系列开发板以及包含板载 OPT3001芯片的 EDU-MKII Booster Pack。 该芯片的接口是 i2c。 我在读取 OPT3001上的制造商 ID 寄存器时遇到困难。 我可以正确读取 MSB、但 LSB 始终为1。 下面是我使用的代码:
int16_t lsb;
int16_t MSB;
int16_t three;
///------------------------------ 发送--------------------------------------------
//指定我们要向写入(寄存器地址)
//从器件
I2CMasterSlaveAddrSet (I2C1_base、slaveAddr、false);
//指定要读取的寄存器
I2CMasterDataPut (I2C1_base、MANUFACTUREID_REG);
//将控制字节和寄存器地址字节发送到从器件
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_SEND);
//等待从机接收并确认数据。
while (I2CMasterBusy (I2C1_base));
///------------------------------ 接收---------------------------------------------------
//指定我们正在读取(寄存器地址)到
//从器件
I2CMasterSlaveAddrSet (I2C1_base、slaveAddr、true);
//发送控制字节并从我们的寄存器中读取
//specified
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_start);
//等待 MCU 完成事务
while (I2CMasterBusy (I2C1_base));
MSB =(I2CMasterDataGet (I2C1_base)& 0xFF);
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_finish);//接收
while (I2CMasterBusy (I2C1_base));
LSB =(I2CMasterDataGet (I2C1_base)& 0xFF);
结果=(MSB << 8)| lsb;
在调试中、我获取 MSB = 0000000001010100b (正确)
和 lsb = 000011111111b (不正确)
是否有人发现上述代码有任何问题? 根据我的理解、它应该正常工作。 谢谢!