主题中讨论的其他器件:HALCOGEN、 CODECOMPOSER、 TMP101、 ADS1115、 TMS570LS1224、
工具与软件:
有人可以帮助我吗?我正在尝试从 tmp101na 中读取温度。我的代码卡在 readTemperature 函数中的第一个 i2c 发送为什么它停止运行我正在使用 halcogen 和 codecomposer 来编写我提供的代码请查看并告诉我问题
/*用户代码 begin (0)*/
/*用户代码结束*/
/*包含文件*/
#include "sys_common.h"
/*用户代码 begin (1)*/
#include "i2c.h"
#include "sci.h"
#include "sys_core.h"
#include "stdio.h"
uint16_t delay=0;
/*用户代码结束*/
/**@fn void main (void)
*@简要应用程序主函数
*@注意此函数默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*/
/*用户代码 begin (2)*/
//从 TMP101读取温度数据的函数
uint16_t readTemperature (void)
{
uint8_t tempData[2];
uint16_t 温度= 0;
uint8_t configData[2];
configData[0]= 0x01;//配置寄存器
configData[1]= 0x60;//配置字节(对于12位分辨率、R1=1、R0=1)
//将配置写入 TMP101
i2cSetSlaveAdd (i2cREG1、0x48);
i2cSetDirection (i2cREG1、I2C_transmitter);
i2cSetCount (i2cREG1、2);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);//发送 I2C 启动条件
i2cSend (i2cREG1、3、configData);
while (i2cIsBusBusy (i2cREG1)= true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD(i2cREG1);
for (delay=0;delay<1000;delay++);
//开始与 TMP101通信以选择温度寄存器
while (i2cIsMasterReady (i2cREG1)!= true);
i2cSetSlaveAdd (i2cREG1、0x48);
i2cSetDirection(i2cREG1,I2C_transmitter );
i2cSetCount (i2cREG1、1);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);//发送 I2C 启动条件
i2cSendByte (i2cREG1、0x00);//设置指向温度寄存器的指针
while (i2cIsBusBusy (i2cREG1)= true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD(i2cREG1);
for (delay=0;delay<1000;delay++);
while (i2cIsBusBusy (i2cREG1)!= true);
i2cSetSlaveAdd (i2cREG1、0x48);
i2cSetDirection (i2cREG1、I2C_RECEIVER);
i2cSetCount (i2cREG1、2);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);//发送 I2C 启动条件
i2cReceive (i2cREG1、tempData);
while (i2cIsBusBusy (i2cREG1)= true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD(i2cREG1);
for (delay=0;delay<1000;delay++);
//合并两字节的温度数据
温度=(tempData[0]<< 8)| tempData[1];
温度>>= 4;//右移可针对12位数据格式进行调整
回流温度;
}
/*用户代码结束*/
int main (void)
{
/*用户代码 begin (3)*/
//初始化系统和 I2C 通信
i2cInit ();
sciInit();
while (1)
{
//读取并显示温度数据
uint16_t temperature = readTemperature ();
uint8_t tempBytes[2];
//将16位温度值拆分为两个8位值
tempBytes[0]=(uint8_t)(temperature >> 8);//高位字节
tempBytes[1]=(uint8_t)(temperature & 0xFF);//低位字节
//通过 SCI 发送这两个字节
sciSend (scilinREG、sizeof (tempBytes)、tempBytes);
//如有必要、添加延迟
}
/*用户代码结束*/
}
/*用户代码 begin (4)*/
/*用户代码结束*/