主题:TMP102中讨论的其他部件
工具/软件:Code Composer Studio
大家好!
我`m使用Drivelib读取 和配置TMP102来完成I2C的实现,但在读取模式下没有成功。
设置寄存器0x00 (温度寄存器)后,如下所示: I2C TMP102地址(0x48)在传输数据中(0x90写模式/0x91读取模式)
要进行设置,我使用了以下代码:
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE,TMP102_I2C_ADDRESS);//设置TMP102地址
EUSCI_B_I2C_setMode (EUSCI_B0_BBASE,EUSCI_B_I2C_Transmit_mode);//在传输模式下设置
EUSCI_B_I2C_masterSendMultiByteStartWithTimeout(EUSSCI_B0_Base,0x00,Timeout_I2C);//使用初始化传输
EUSCI_B_I2C_masterSendMultiByteFinishWithTimeout (EUSCI_B0_BASE,0x00,Timeout_I2C);
while ((EUSSCI_B_I2C_isBusy (EUSSCI_B0_BBASE ))&--Timeoutcounter);
设置寄存器后,我需要开始接收数据。 TMP102发送2字节(MSB和LSB)
根据示例I编码:
(I2C,带输出中断模式)
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE,TMP102_I2C_ADDRESS);//设置TMP102地址
EUSCI_B_I2C_setMode (EUSCI_B0_BBASE,EUSCI_B_I2C_Receive_mode);
//开始发送
EUSCI_B_I2C_masterReceiveStart (EUSCI_B0_BASE);
While (EUSSCI_B_I2C_isBusy (EUSSCI_B0_BBASE ));
//接收第一个字节
temp_Word[2]= EUSCI_B_I2C_masterReceiveMultiByteNext(EUSI_B0_BUSB);
While (EUSSCI_B_I2C_isBusy (EUSSCI_B0_BBASE ));
//接收第二个字节
temp_Word[1]= EUSI_B_I2C_masterReceiveMultiByteFinish (EUSI_B0_BASE);
While (EUSSCI_B_I2C_isBusy (EUSSCI_B0_BBASE ));
//禁用I2C模块
EUSCI_B_I2C_DISABLE (EUSCI_B0_BASE);
temp_Word_out = Temp_Word[0]<8;
temp_Word_out = Temp_Word_out + Temp_Word[1];
返回Temp_Word_Out;
I2C接收与当前温度兼容的第一个字节(0x16),但在后面停止,如下图所示
有人可以帮助我了解问题出在哪里,我应该怎么做才能解决问题?
1-为什么传输在收到第一个字节后停止?
2当我发送配置TMP寄存器的命令时,我需要发送两次命令(EUSSCI_B_I2C_masterSendMultiByteFinishWithTime(EUSSCI_B0_Bbase, 0x00, Timeout_I2C);)如果我只输入一个命令,I2C只发送从属地址。 为什么会发生这种情况?
谢谢,顺祝商祺











