使用I2C读取TI温度传感器

时间:2018-06-23 07:20:02

标签: interrupt i2c master-slave texas-instruments

我是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);

我真的不确定从这里出发,有什么想法或明显的错误吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我建议首先尝试从内容不变的寄存器中读取数据:对于tmp468,这将是地址FE,其中包含制造商的ID 0x5449。这样一来,您就可以“散布”您的I2C代码。

(顺便说一句,您可能还想在http://e2e.ti.com/support/microcontrollers/hercules/论坛中提问。)