主题中讨论的其他器件:AFE4403EVM、 AFE4403
工具/软件:Code Composer Studio
您好!
我使用 AFE4403EVM 手表套件同时测量 PPG、ACC 和陀螺仪。 但是、我在通过 I2C 接口读取 MPU9150的数据时遇到了问题。
下面是我用于读取运动数据的代码、我直接从文件 slaa671a 复制了该代码。 黄色部分是问题所在、程序始终在这两行代码(I2C 锁定?)处暂停。我无法再获取数据。如何解决此问题?
PS: 在我获得一个数据后、它将通过 USB 直接传输到计算机。
int8_t HAL_I2C_READ_ONLY (uint16_t baseAddress、uint8_t SLAVE_addr、uint8_t reg、uint8_t *数据、uint8_t 字节计数)
{
uint8_t comres = 0;
//等待先前的通信清除
while (HWREG8 (baseAddress + OFS_UCBxSTAT)& UCBBUSY);
//加载设备从地址
HWREG16 (baseAddress + OFS_UCBxI2CSA)=(slave_addr);
//关闭发送(启用接收)
HWREG8 (baseAddress + OFS_UCBxCTL1)&&~Ω UCTR;
//生成起始位
HWREG8 (baseAddress + OFS_UCBxCTL1)|= UCTXSTT;
//等待开始位完成
while (HWREG8 (baseAddress + OFS_UCBxCTL1)& UCTXSTT);
//检查从器件 ACK / NACK
if ((HWREG8 (baseAddress + OFS_UCBxIFG)& UCNACKIFG))
{
//如果 NACK,则设置停止位并退出
HWREG8 (baseAddress + OFS_UCBxCTL1)|= UCTXSTP;
返回(USCI_I2C_STATUS_SLAVE_NACK);
}
//现在读取一个或多个数据字节
while (字节计数)
{
//如果读取1个字节(或最后一个字节),现在生成停止位以满足规范要求
if (字节计数-==1)
{
HWREG8 (baseAddress + OFS_UCBxCTL1)|= UCTXSTP;
}
//等待下一个 RX INT
while (!(HWREG8 (baseAddress + OFS_UCBxIFG)& UCRXIFG));
//读取字节
*数据++= HWREG8 (baseAddress + OFS_UCBxRXBUF);
}
return (comres);
}