From a09fbb41715c66dd7c2e7b70b5fe16fccb85e49b Mon Sep 17 00:00:00 2001 From: Mikhail Avkhimenia Date: Tue, 12 Aug 2014 13:59:21 +0400 Subject: [PATCH] HAL_Linux: Add SPI configuration for Navio This changes the SPI bus number to be zero based on Linux --- libraries/AP_HAL_Linux/SPIDriver.cpp | 25 +++++++++++++++---------- libraries/AP_HAL_Linux/SPIDriver.h | 3 +++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/libraries/AP_HAL_Linux/SPIDriver.cpp b/libraries/AP_HAL_Linux/SPIDriver.cpp index f64995983f..7dc0694c8d 100644 --- a/libraries/AP_HAL_Linux/SPIDriver.cpp +++ b/libraries/AP_HAL_Linux/SPIDriver.cpp @@ -23,13 +23,18 @@ extern const AP_HAL::HAL& hal; #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF || CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLE LinuxSPIDeviceDriver LinuxSPIDeviceManager::_device[LINUX_SPI_DEVICE_NUM_DEVICES] = { // different SPI tables per board subtype - LinuxSPIDeviceDriver(0, AP_HAL::SPIDevice_LSM9DS0_AM, SPI_MODE_3, 8, BBB_P9_17, 10*MHZ,10*MHZ), - LinuxSPIDeviceDriver(0, AP_HAL::SPIDevice_LSM9DS0_G, SPI_MODE_3, 8, BBB_P8_9, 10*MHZ,10*MHZ), - LinuxSPIDeviceDriver(1, AP_HAL::SPIDevice_MS5611, SPI_MODE_3, 8, BBB_P9_42, 6*MHZ, 6*MHZ), - LinuxSPIDeviceDriver(1, AP_HAL::SPIDevice_MPU6000, SPI_MODE_3, 8, BBB_P9_28, 500*1000, 20*MHZ), + LinuxSPIDeviceDriver(1, AP_HAL::SPIDevice_LSM9DS0_AM, SPI_MODE_3, 8, BBB_P9_17, 10*MHZ,10*MHZ), + LinuxSPIDeviceDriver(1, AP_HAL::SPIDevice_LSM9DS0_G, SPI_MODE_3, 8, BBB_P8_9, 10*MHZ,10*MHZ), + LinuxSPIDeviceDriver(2, AP_HAL::SPIDevice_MS5611, SPI_MODE_3, 8, BBB_P9_42, 6*MHZ, 6*MHZ), + LinuxSPIDeviceDriver(2, AP_HAL::SPIDevice_MPU6000, SPI_MODE_3, 8, BBB_P9_28, 500*1000, 20*MHZ), /* MPU9250 is restricted to 1MHz for non-data and interrupt registers */ - LinuxSPIDeviceDriver(1, AP_HAL::SPIDevice_MPU9250, SPI_MODE_3, 8, BBB_P9_23, 1*MHZ, 20*MHZ), - LinuxSPIDeviceDriver(1, AP_HAL::SPIDevice_Dataflash, SPI_MODE_3, 8, BBB_P8_12, 6*MHZ, 6*MHZ), + LinuxSPIDeviceDriver(2, AP_HAL::SPIDevice_MPU9250, SPI_MODE_3, 8, BBB_P9_23, 1*MHZ, 20*MHZ), + LinuxSPIDeviceDriver(2, AP_HAL::SPIDevice_Dataflash, SPI_MODE_3, 8, BBB_P8_12, 6*MHZ, 6*MHZ), +}; +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO +LinuxSPIDeviceDriver LinuxSPIDeviceManager::_device[LINUX_SPI_DEVICE_NUM_DEVICES] = { + /* MPU9250 is restricted to 1MHz for non-data and interrupt registers */ + LinuxSPIDeviceDriver(0, AP_HAL::SPIDevice_MPU9250, SPI_MODE_3, 8, RPI_GPIO_7, 1*MHZ, 16*MHZ), }; #else // empty device table @@ -44,12 +49,12 @@ LinuxSPIDeviceDriver::LinuxSPIDeviceDriver(uint8_t bus, enum AP_HAL::SPIDevice t _bus(bus), _type(type), _mode(mode), - _bitsPerWord(bitsPerWord), + _bitsPerWord(bitsPerWord), _lowspeed(lowspeed), _highspeed(highspeed), _speed(highspeed), _cs_pin(cs_pin) -{ +{ } void LinuxSPIDeviceDriver::init() @@ -108,7 +113,7 @@ void LinuxSPIDeviceManager::init(void *) { char path[] = "/dev/spidevN.0"; for (uint8_t i=0; ipanic("SPIDriver: unable to open SPI bus"); @@ -192,7 +197,7 @@ void LinuxSPIDeviceManager::transaction(LinuxSPIDeviceDriver &driver, const uint // keep valgrind happy memset(rx, 0, len); } - + ioctl(_fd[driver._bus], SPI_IOC_MESSAGE(1), &spi); cs_release(driver._type); } diff --git a/libraries/AP_HAL_Linux/SPIDriver.h b/libraries/AP_HAL_Linux/SPIDriver.h index 9073712d22..afbb472d3a 100644 --- a/libraries/AP_HAL_Linux/SPIDriver.h +++ b/libraries/AP_HAL_Linux/SPIDriver.h @@ -8,6 +8,9 @@ #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF || CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLE #define LINUX_SPI_NUM_BUSES 2 #define LINUX_SPI_DEVICE_NUM_DEVICES 6 +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO +#define LINUX_SPI_NUM_BUSES 1 +#define LINUX_SPI_DEVICE_NUM_DEVICES 1 #else #define LINUX_SPI_NUM_BUSES 0 #define LINUX_SPI_DEVICE_NUM_DEVICES 0