我是i2c的新手,对使用主设备从从设备进行读取有什么了解,但是我正在努力为我的伪代码成功编码。
我想使用TMS50ls1227PGE的i2c引脚读取TI TMP468上的本地温度传感器。我已启用i2c驱动程序pinmux,并启用了HalCoGen中的所有i2c中断。作为参考,所有非标准功能都在TI的i2c.c文件中定义。
在CCS中,我在FreeRTOS任务中键入了以下代码(我在main中做了i2cInit()):
i2cSetMode(i2cREG1, I2C_MASTER);
/* Set direction to receiver */
i2cSetDirection(i2cREG1, I2C_TRANSMITTER);
i2cSetStart(i2cREG1); //start bit
i2cSetSlaveAdd(i2cREG1, 0b1001000); //address of temp sensor
while(i2cIsTxReady(i2cREG1)){}; //wait until flag is clear
i2cSendByte(i2cREG1, 0b00000000); //register to read from
i2cSetStart(i2cREG1);
i2cSendByte(i2cREG1, 0b10010001); //read from sensor
i2cSetDirection(i2cREG1, I2C_RECEIVER);
while(i2cIsRxReady(i2cREG1)){};
data = i2cReceiveByte(i2cREG1); //read data
i2cSetStop(i2cREG1); //stop bit
我在数据变量中没有看到任何活动,并且在调试时,我的代码始终停留在void i2cInterrupt()中:
uint32 vec = (i2cREG1->IVR & 0x00000007U);
我真的不确定从这里出发,有什么想法或明显的错误吗?
谢谢!
答案 0 :(得分:2)
我建议首先尝试从内容不变的寄存器中读取数据:对于tmp468,这将是地址FE,其中包含制造商的ID 0x5449。这样一来,您就可以“散布”您的I2C代码。
(顺便说一句,您可能还想在http://e2e.ti.com/support/microcontrollers/hercules/论坛中提问。)