From c5e11cd16f5be37094a221ef9cfc44ead1326a62 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 20 Jul 2016 04:41:18 -1000 Subject: [PATCH] TAP:Added i2c speed setting to init --- src/drivers/boards/tap-v1/CMakeLists.txt | 1 + src/drivers/boards/tap-v1/board_config.h | 13 +++++ src/drivers/boards/tap-v1/tap_i2c.cpp | 69 ++++++++++++++++++++++++ src/drivers/boards/tap-v1/tap_init.c | 7 +++ src/drivers/mpu6000/mpu6000.cpp | 16 +++--- 5 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 src/drivers/boards/tap-v1/tap_i2c.cpp diff --git a/src/drivers/boards/tap-v1/CMakeLists.txt b/src/drivers/boards/tap-v1/CMakeLists.txt index b44014b0d7..a2adb6c876 100644 --- a/src/drivers/boards/tap-v1/CMakeLists.txt +++ b/src/drivers/boards/tap-v1/CMakeLists.txt @@ -39,6 +39,7 @@ px4_add_module( ../common/board_name.c tap_init.c tap_pwr.c + tap_i2c.cpp tap_sdio.c tap_timer_config.c tap_spi.c diff --git a/src/drivers/boards/tap-v1/board_config.h b/src/drivers/boards/tap-v1/board_config.h index de8ac79c8f..d3f450b143 100644 --- a/src/drivers/boards/tap-v1/board_config.h +++ b/src/drivers/boards/tap-v1/board_config.h @@ -108,6 +108,9 @@ __BEGIN_DECLS #define PX4_I2C_OBDEV_HMC5883 0x1e +#define PX4_I2C_BUS_ONBOARD_HZ 400000 +#define PX4_I2C_BUS_SONAR_HZ 400000 +#define PX4_I2C_BUS_EXPANSION_HZ 100000 /* * Devices on the onboard bus. * @@ -339,5 +342,15 @@ bool board_pwr_button_down(void); void board_pwr(bool on_not_off); +/**************************************************************************** + * Name: board_i2c_initialize + * + * Description: + * Called to set I2C bus frequncies. + * + ****************************************************************************/ + +int board_i2c_initialize(void); + #endif /* __ASSEMBLY__ */ __END_DECLS diff --git a/src/drivers/boards/tap-v1/tap_i2c.cpp b/src/drivers/boards/tap-v1/tap_i2c.cpp new file mode 100644 index 0000000000..99b288917f --- /dev/null +++ b/src/drivers/boards/tap-v1/tap_i2c.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** + * + * Copyright (c) 2016 PX4 Development Team. All rights reserved. + * Author: David Sidrane + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file tap_i2c.c + * + * TAP_V1 LED backend. + */ + +#include + + +#include "board_config.h" +#include +#include +/**************************************************************************** + * Name: board_i2c_initialize + * + * Description: + * Called to set I2C bus frequncies. + * + ****************************************************************************/ + +int board_i2c_initialize(void) +{ + + int ret = device::I2C::set_bus_clock(PX4_I2C_BUS_ONBOARD, PX4_I2C_BUS_ONBOARD_HZ); + + if (ret == OK) { + ret = device::I2C::set_bus_clock(PX4_I2C_BUS_SONAR, PX4_I2C_BUS_SONAR); + } + + if (ret == OK) { + ret = device::I2C::set_bus_clock(PX4_I2C_BUS_EXPANSION, PX4_I2C_BUS_EXPANSION_HZ); + } + + return ret; +} diff --git a/src/drivers/boards/tap-v1/tap_init.c b/src/drivers/boards/tap-v1/tap_init.c index d221456f00..d86a9dd01c 100644 --- a/src/drivers/boards/tap-v1/tap_init.c +++ b/src/drivers/boards/tap-v1/tap_init.c @@ -207,6 +207,13 @@ __EXPORT int nsh_archinitialize(void) led_off(LED_AMBER); led_off(LED_BLUE); + result = board_i2c_initialize(); + + if (result != OK) { + up_ledon(LED_AMBER); + return -ENODEV; + } + #if defined(FLASH_BASED_PARAMS) static sector_descriptor_t sector_map[] = { {1, 16 * 1024, 0x08004000}, diff --git a/src/drivers/mpu6000/mpu6000.cpp b/src/drivers/mpu6000/mpu6000.cpp index 5a42fac6c5..952a71a3ae 100644 --- a/src/drivers/mpu6000/mpu6000.cpp +++ b/src/drivers/mpu6000/mpu6000.cpp @@ -99,11 +99,14 @@ sample rate and then throw away duplicates by comparing accelerometer values. This time reduction is enough to cope with worst case timing jitter due to other timers + + I2C bus is running at 100 kHz Transaction time is 2.163Ms + I2C bus is running at 400 kHz (304 kHz acutal) Transaction time + is 583 uS + */ #define MPU6000_TIMER_REDUCTION 200 -#define MPU6000_CONVERSION_INTERVAL 10000 //todo:This is set long for the moment -// As the bus is running at 100KHX and the -// Transaction time is 2.163Ms + enum MPU6000_BUS { MPU6000_BUS_ALL = 0, @@ -1683,12 +1686,7 @@ MPU6000::cycle() &_work, (worker_t)&MPU6000::cycle_trampoline, this, - USEC2TICK(MPU6000_CONVERSION_INTERVAL)); -//todo:This is set long for the moment -// As the bus is running at 100KHX and the -// Transaction time is 2.163Ms -// It should be USEC2TICK(_call_interval - MPU6000_TIMER_REDUCTION)); -// When I get the bus running at 400Khz + USEC2TICK(_call_interval - MPU6000_TIMER_REDUCTION)); } } #endif