大家好、团队、
我代表我们在 CSC 支持的客户写信。 他在以下问题上需要帮助:
我正在尝试使用 MikroElektronica Mikromedia 5的开发工具来实现 Tiva。 它使用 TM4C129LNCZAD 芯片、I2C 功能似乎比较复杂。 我正在尝试按照 DS 中列出的步骤(第1448-1449页、主器件在主器件重复启动传输后的主器件接收多个字节)来设置采用 Melexis 90614红外温度计的 I2C 传输。 我主要尝试使用直接寄存器写入来编写代码、因为它们的库函数似乎不适合我构建。 下面是我的示例代码、其中包含有关其降低位置的注释说明。 您可以提供任何帮助吗?
空 IrThermMeasure()
{
浮点测量温度= 0.0;
字符文本[10];
字符 Tdata_[3];
I2C4_MCLKOCNT = 0xDA;
I2C4_Enable();
I2C4_MSA =(0x5A << 1)+ 0;//地址0x5A + 0进行写入
I2C4_MDR = 0x07;// RAM 访问命令、地址0x07
I2C4_MCS = 0x03;//发出写入开始位,运行
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
I2C4_MSA =(0x5A << 1)+ 1;//地址0x5A + 1用于读取
//在该注释上方,它将发出地址并写入0x07
I2C4_MCS = 0x0B;//Rec with Ack Req、Start bit、and Run
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
Tdata_[0]= I2C4_MDR;
//在该注释上方,流程为起始位、地址、0x07、起始位、地址、 来自 IrThermo 的一个字节的数据、而 clk 引脚不会释放(不应释放)
//换句话说,在这里,它似乎正常工作。
I2C4_MCS = 0x09;//接收一个字节的数据
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
I2C4_MCS = 0x05;//写入地址并通过停止位接收一个字节的数据
DELAY_us (1);
while (I2C4_MCS-78B0!= 0)
{}
delay_ms (1);
//最后一行是使一切混乱的东西。 流程现在开始了
//起始位、地址、0x07、0x07、停止位
//如果我更改之前 MDR 中的内容,它会将 MDR 中的内容作为最后一个字节发送出去。
//似乎可以通过某种方式将自身更改为写入函数而不是读取
// I2C4_Disable ();
// measuredTemperature =((int) Tdata_[0]+(int) Tdata_[1]<<8)* 0.02;
// measuredTemperature = irthrom3v3_getTobject ();
// FloatToStr (measuredTemperature、text);
// TempButton.Caption = Tdata_;
// IntToStr (text、Tdata_[0]);
// TempButton.Caption =文本;
// DrawRoundButton (&TempButton);
}
初始化正常、我获取了一些数据、但尝试获取任何大于1字节的数据(我需要3个字节)只会导致主器件在 MDR 中发送数据两次、也就是这种情况。 它似乎切换回写入模式。
谢谢、
特拉维斯