初级会员

- 积分
- 75
- 金钱
- 75
- 注册时间
- 2018-4-8
- 在线时间
- 10 小时
|
1金钱
在实际调试中发现,当我快速摇晃MPU6050的时候,MPU会卡住,读不出数据,经过跟踪,发现fifo_count 一直小于length,一直在打印fifo_count < length,不知道是否有人遇到这个问题,帮忙解答一下,这是什么情况
[mw_shl_code=applescript,true]int mpu_read_fifo_stream(unsigned short length, unsigned char *data,
unsigned char *more)
{
unsigned char tmp[2];
unsigned short fifo_count;
if (!st.chip_cfg.dmp_on)
{
printf("st.chip_cfg.dmp_on\r\n");
return -1;
}
if (!st.chip_cfg.sensors)
{
printf("st.chip_cfg.sensors\r\n");
return -1;
}
if (i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp))
{
printf("i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp)\r\n");
return -1;
}
fifo_count = (tmp[0] << 8) | tmp[1];
if (fifo_count < length) {
more[0] = 0;
printf("fifo_count < length\r\n");
return -1;
}
if (fifo_count > (st.hw->max_fifo >> 1)) {
/* FIFO is 50% full, better check overflow bit. */
if (i2c_read(st.hw->addr, st.reg->int_status, 1, tmp))
{
printf("i2c_read(st.hw->addr, st.reg->int_status, 1, tmp)\r\n");
return -1;
}
if (tmp[0] & BIT_FIFO_OVERFLOW) {
printf("tmp[0] & BIT_FIFO_OVERFLOW\r\n");
mpu_reset_fifo();
return -2;
}
}
if (i2c_read(st.hw->addr, st.reg->fifo_r_w, length, data))
{
printf("tmp[0] & BIT_FIFO_OVERFLOW\r\n");
return -1;
}
more[0] = fifo_count / length - 1;
return 0;
}[/mw_shl_code]
|
|