主题中讨论的其他器件: MSP430WARE、 MSPWARE、 BQ27545-G1
你(们)好
即使我的配置与链接帖子中的配置相同--( Dipin 的帖子)
配置-为 I2C 配置的 MSP430F5340、用于与 BQ27545电量监测计 IC 通信。
问题- I2C 超时定期发生或在 MSP 加电后发生。 突出显示了我卡住的代码部分。
以下是代码:
#define LOOP_COUNT 10000
空 BatteryFuelGuageI2CInit (空)
{
P4SEL |= 0x06;//将 I2C 引脚分配给 USCI_B1
UCB1CTL1 |= UCSWRST;//启用 SW 复位
UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;// I2C 主器件、同步模式
UCB1CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持软件复位
UCB1BR0 = 30;// fSCL = SMCLK/30 =~33.33kHz
UCB1BR1 = 0;
}
uint16_t BatteryFuelGuageI2CMasterReceive (uint8_t ucSlaveAddress、uint8_t ucCmd、uint8_t ucDataLength)
{
uint8_t ucRxdata[2]={};
//将从地址设置为0x55
UCB1I2CSA = SlavuceAddress;
//清除 SW 复位,恢复操作
UCB1CTL1 &=~UCSWRST;
//I2C 超时标志
G_I2Ctimeoutflag =真;
uint16_t uloopcount = 0;
对于(uloopcount = 0;uloopcount < loop_count;uloopcount++)
{
如果((UCB1CTL1 & UCTXSTP)=0)
{
中断;
}
}
if (uloopcount = loop_count)
{
返回0;
}
//发送器,发送启动条件
UCB1CTL1 |= UCTR + UCTXSTT;
/*将命令发送到 FuelGuage */
对于(uloopcount = 0;uloopcount < loop_count;uloopcount++)
{
IF (UCB1IFG 和 UCTXIFG)
{
中断;
}
}
if (g_uloopcount = loop_count)
{
返回0;
}
//发送 cmd
UCB1TXBUF = ucCmd;
//等待命令被发送
对于(uloopcount = 0;uloopcount < loop_count;uloopcount++)
{
IF (UCB1IFG 和 UCTXIFG)
{
中断;
}
}
if (g_uloopcount = loop_count)
{
返回0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//将主机设置为接收模式,发送启动条件
UCB1CTL1 &=~UCTR;
UCB1CTL1 |= UCTXSTT;//发送重复起始条件
unsigned int uiCounter = 0;
unsigned int uiRxCounter = 2;
while (uiRxCounter >0)
{
对于(uloopcount = 0;uloopcount < loop_count;uloopcount++)
{
IF (UCB1IFG 和 UCRXIFG)
{
中断;
}
}
if (uloopcount = loop_count)
{
返回0;
}
ucRxdata[uiCounter]= UCB1RXBUF;//从电量监测计接收数据
if (uiCounter = 0)
{
//发送停止条件。
UCB1CTL1 |= UCTXSTP;
}
uiCounter++;
uRxCounter--;
}
UCB1IFG &=~UCRXIFG;
/*清除 USCI_B1 TX int 标志*/
UCB1IFG &=~UCTXIFG;
G_uBatteryInfo =(uint16_t) ucRxdata[0]<< 8 | ucRxdata[1];//逐字节发送接收到的数据
G_I2Ctimeoutflag = false;
返回 g_uBatteryInfo;
}
需要您的建议来解决此问题。
谢谢
Rekha