diff options
author | Andrew Tridgell <tridge@samba.org> | 2013-11-28 20:29:33 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2013-11-30 20:20:23 +1100 |
commit | cb76f07d3153895e379f15f6ca388ef04c6384dc (patch) | |
tree | a4023cffd11bd86dfe67e4f96356666e8189f162 /src | |
parent | 720f6ab313ab869b89a4767d202ec2e64ddb22e9 (diff) | |
download | px4-firmware-cb76f07d3153895e379f15f6ca388ef04c6384dc.tar.gz px4-firmware-cb76f07d3153895e379f15f6ca388ef04c6384dc.tar.bz2 px4-firmware-cb76f07d3153895e379f15f6ca388ef04c6384dc.zip |
l3gd20: added I2C disable based on method from ST engineering support
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/l3gd20/l3gd20.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/drivers/l3gd20/l3gd20.cpp b/src/drivers/l3gd20/l3gd20.cpp index 8f5674823..31e38fbd9 100644 --- a/src/drivers/l3gd20/l3gd20.cpp +++ b/src/drivers/l3gd20/l3gd20.cpp @@ -219,6 +219,11 @@ private: void reset(); /** + * disable I2C on the chip + */ + void disable_i2c(); + + /** * Static trampoline from the hrt_call context; because we don't have a * generic hrt wrapper yet. * @@ -574,6 +579,7 @@ L3GD20::read_reg(unsigned reg) uint8_t cmd[2]; cmd[0] = reg | DIR_READ; + cmd[1] = 0; transfer(cmd, cmd, sizeof(cmd)); @@ -700,8 +706,18 @@ L3GD20::stop() } void +L3GD20::disable_i2c(void) +{ + uint8_t a = read_reg(0x05); + write_reg(0x05, (0x20 | a)); +} + +void L3GD20::reset() { + // ensure the chip doesn't interpret any other bus traffic as I2C + disable_i2c(); + /* set default configuration */ write_reg(ADDR_CTRL_REG1, REG1_POWER_NORMAL | REG1_Z_ENABLE | REG1_Y_ENABLE | REG1_X_ENABLE); write_reg(ADDR_CTRL_REG2, 0); /* disable high-pass filters */ @@ -753,6 +769,7 @@ L3GD20::measure() perf_begin(_sample_perf); /* fetch data from the sensor */ + memset(&raw_report, 0, sizeof(raw_report)); raw_report.cmd = ADDR_OUT_TEMP | DIR_READ | ADDR_INCREMENT; transfer((uint8_t *)&raw_report, (uint8_t *)&raw_report, sizeof(raw_report)); |