mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-25 21:23:33 +08:00
mpu6000: disable interrupts during initial reset
this seems to avoid a problem where the mpu6000 doesn't startup correctly if other devices are transferring at the same time.
This commit is contained in:
committed by
Lorenz Meier
parent
d53b00283e
commit
bccf65cc28
@@ -505,17 +505,26 @@ out:
|
|||||||
|
|
||||||
void MPU6000::reset()
|
void MPU6000::reset()
|
||||||
{
|
{
|
||||||
|
// if the mpu6000 is initialised after the l3gd20 and lsm303d
|
||||||
|
// then if we don't do an irqsave/irqrestore here the mpu6000
|
||||||
|
// frequenctly comes up in a bad state where all transfers
|
||||||
|
// come as zero
|
||||||
|
irqstate_t state;
|
||||||
|
state = irqsave();
|
||||||
|
|
||||||
// Chip reset
|
|
||||||
write_reg(MPUREG_PWR_MGMT_1, BIT_H_RESET);
|
write_reg(MPUREG_PWR_MGMT_1, BIT_H_RESET);
|
||||||
up_udelay(10000);
|
up_udelay(10000);
|
||||||
|
|
||||||
// Wake up device and select GyroZ clock (better performance)
|
// Wake up device and select GyroZ clock. Note that the
|
||||||
|
// MPU6000 starts up in sleep mode, and it can take some time
|
||||||
|
// for it to come out of sleep
|
||||||
write_reg(MPUREG_PWR_MGMT_1, MPU_CLK_SEL_PLLGYROZ);
|
write_reg(MPUREG_PWR_MGMT_1, MPU_CLK_SEL_PLLGYROZ);
|
||||||
up_udelay(1000);
|
up_udelay(1000);
|
||||||
|
|
||||||
// Disable I2C bus (recommended on datasheet)
|
// Disable I2C bus (recommended on datasheet)
|
||||||
write_reg(MPUREG_USER_CTRL, BIT_I2C_IF_DIS);
|
write_reg(MPUREG_USER_CTRL, BIT_I2C_IF_DIS);
|
||||||
|
irqrestore(state);
|
||||||
|
|
||||||
up_udelay(1000);
|
up_udelay(1000);
|
||||||
|
|
||||||
// SAMPLE RATE
|
// SAMPLE RATE
|
||||||
|
|||||||
Reference in New Issue
Block a user