diff options
author | Andrew Tridgell <tridge@samba.org> | 2013-11-28 20:29:33 +1100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2013-12-10 11:59:54 +0100 |
commit | 9a169d8ef453aea1729b76940b10733591c4c6d8 (patch) | |
tree | 2c09601546eb1a0cd8fa9c95f27b5e4d3b476a13 /src | |
parent | 44b2543d2d968a61b2b7cbef6d4409dcdf5c9174 (diff) | |
download | px4-firmware-9a169d8ef453aea1729b76940b10733591c4c6d8.tar.gz px4-firmware-9a169d8ef453aea1729b76940b10733591c4c6d8.tar.bz2 px4-firmware-9a169d8ef453aea1729b76940b10733591c4c6d8.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)); |