Thread 中讨论的其他部件:INA237、 SysConfig
尊敬的香榭丽舍
我的客户通过 I2C 将 INA237连接到 RM46L852、但与 INA237通信失败。
由于在 SysConfig 生成的驱动程序代码下没有实现 I2C 通信、
https://dev.ti.com/sysconfig/index.html?product=ascstudio&module=/ti/sensors/currentsensor/INA237
他们自己实施了这项计划,但未能与 INA237通信。
您能否查看以下代码或与 INA237共享 I2C 通信示例?
~~~~~~~μ A
uint8_t i2c_send (uint32长度、uint8 *数据、uint8_t slave_Address)
{
uint8_t ERR_ret = 0;
// while (i2cIsTxReady (i2cREG1)=0){}
uint16_t cnt = 0;
i2cSetSlaveAdd (i2cREG1、SLAVE_Address);
i2cSetDirection (i2cREG1、I2C_transmitter);
i2cSetCount (i2cREG1、长度);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);
i2cSend (i2cREG1、长度、数据);
//i2cSetStop (i2cREG1);
while (i2cIsBusy (i2cREG1)=true){
CNT++;
if (cnt > 0x7ff){
//printf ("i2c_send timeout!!!!\n");
ERR_RET = 1;
中断;
}
}
CNT = 0;
while (i2cIsStopDetected (i2cREG1)= 0){
CNT++;
if (cnt > 0x7ff){
//printf ("i2c_send timeout!!!!\n");
ERR_RET = 1;
中断;
}
}
i2cClearSCD (i2cREG1);
CNT = 0;
while (i2cIsMasterReady (i2cREG1)==0){
CNT++;
if (cnt > 0x7ff){
//printf ("i2c_send timeout!!!!\n");
ERR_RET = 1;
中断;
}
}
如果(ERR_RET = 1){
//printf ("err_ret %d:do i2cInit\n"、err_ret);
i2C_reinit();
}
返回 ERR_RET;
}
uint8_t i2c_receive (uint8 * data、uint8_t cnt、uint8_t slave_Address)
{
uint8_t ERR_ret = 0;
uint16_t failcnt = 0;
// uint8_t i;
// uint8_t tempData[40];
// while (i2cIsRxReady (i2cREG1)=0){}
i2cSetSlaveAdd (i2cREG1、SLAVE_Address);
i2cSetDirection (i2cREG1、I2C_RECEIVER);
i2cSetCount (i2cREG1、cnt);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);
#if 0
i2cReceive (i2cREG1,40、tempData);
其他
i2cReceive (i2cREG1、cnt、&data[0]);
/*
if (data[0]<3)
{
i2cREG1->MDR |= 0x8000;
i2cSetStop (i2cREG1);
i2cReceive(i2cREG1,1,1,&data[1]);
}
其他
{
i2cReceive (i2cREG1、data[0]-2、&data[1]);
i2cREG1->MDR |= 0x8000;
i2cSetStop (i2cREG1);
i2cReceive (i2cREG1、1、&data[0]-1]);
}
*
#endif
//i2cSetStop (i2cREG1);
while (i2cIsBusy (i2cREG1)=true){
failcn++;
if (failcnt > 0x7ff){
//printf ("i2c_receive timeout!!!!\n");
ERR_RET = 1;
中断;
}
}
failcnt = 0;
while (i2cIsStopDetected (i2cREG1)= 0){
failcn++;
if (failcnt > 0x7ff){
//printf ("i2c_receive timeout!!!!\n");
ERR_RET = 1;
中断;
}
}
failcnt = 0;
i2cClearSCD (i2cREG1);
while (i2cIsMasterReady (i2cREG1)==0){
failcn++;
if (failcnt > 0x7ff){
//printf ("i2c_receive timeout!!!!\n");
ERR_RET = 1;
中断;
}
}
I2C_DELAY (100);
// memcpy (data、tempData、tempData[0]);
返回 ERR_RET;
}
int8_t MCU_i2c 传输(uint8_t BusID、uint8_t i2cAddr、
uint8_t * dataToWrite、uint8_t writeLength、
uint8_t * dataToRead、 uint8_t readLength)
{
/*
* 在此处添加 MCU 特定的 I2C 读取/写入代码。
*
INT8_t ERR_RET = 0;
ERR_ret =(INT8_t) i2c_send (writeLength、dataToWrite、i2cAddr);
if (err_ret!= 0){
printf ("发送错误\n");
}
否则、如果(readLength > 0){
ERR_ret = i2c_receive (dataToRead、readLength、i2cAddr);
if (err_ret!= 0){
printf ("接收错误\n");
}
}
返回 ERR_RET;
/*
* 添加用于错误处理的 MCU 特定返回代码
*
返回(0);
}
~~~~~~~~μ A
谢谢、此致、
SI