From 7d2e44862f1b4d97ec6fd9d7d5324a9d519a2f4b Mon Sep 17 00:00:00 2001 From: davidaroyer Date: Thu, 17 Aug 2017 17:41:58 -0500 Subject: [PATCH] AP_HAL_Linux: add support for Aerotenna OcPoC-Zynq hardware --- libraries/AP_HAL_Linux/HAL_Linux_Class.cpp | 10 +++++++++- libraries/AP_HAL_Linux/RCInput_SBUS.cpp | 3 ++- libraries/AP_HAL_Linux/RCInput_SBUS.h | 5 ++++- libraries/AP_HAL_Linux/RCInput_ZYNQ.cpp | 4 ++++ libraries/AP_HAL_Linux/RCInput_ZYNQ.h | 5 +++++ libraries/AP_HAL_Linux/RCOutput_ZYNQ.h | 5 +++++ libraries/AP_HAL_Linux/SPIDevice.cpp | 6 ++++++ 7 files changed, 35 insertions(+), 3 deletions(-) diff --git a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp index 81605d2bb2..d1f986a898 100644 --- a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp +++ b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp @@ -32,6 +32,7 @@ #include "RCInput_UDP.h" #include "RCInput_115200.h" #include "RCInput_Multi.h" +#include "RCInput_ZYNQ.h" #include "RCOutput_AeroIO.h" #include "RCOutput_AioPRU.h" #include "RCOutput_Bebop.h" @@ -156,6 +157,12 @@ static RCInput_RPI rcinDriver; static RCInput_Raspilot rcinDriver; #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ZYNQ static RCInput_ZYNQ rcinDriver; +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ +#if OCPOC_DEFAULT_RCIN_SBUS +static RCInput_SBUS rcinDriver; +#else +static RCInput_ZYNQ rcinDriver; +#endif #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP static RCInput_UDP rcinDriver; #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_MINLURE @@ -195,7 +202,8 @@ static RCOutput_PCA9685 rcoutDriver(i2c_mgr_instance.get_device(1, PCA9685_QUINA */ #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_RASPILOT static RCOutput_Raspilot rcoutDriver; -#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ZYNQ +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ZYNQ || \ + CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ static RCOutput_ZYNQ rcoutDriver; #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP static RCOutput_Bebop rcoutDriver(i2c_mgr_instance.get_device(HAL_RCOUT_BEBOP_BLDC_I2C_BUS, HAL_RCOUT_BEBOP_BLDC_I2C_ADDR)); diff --git a/libraries/AP_HAL_Linux/RCInput_SBUS.cpp b/libraries/AP_HAL_Linux/RCInput_SBUS.cpp index 167ccd9310..0c36c331e9 100644 --- a/libraries/AP_HAL_Linux/RCInput_SBUS.cpp +++ b/libraries/AP_HAL_Linux/RCInput_SBUS.cpp @@ -21,7 +21,8 @@ #include #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \ - CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO + CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO || \ + CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ #include "RCInput_SBUS.h" #include #include diff --git a/libraries/AP_HAL_Linux/RCInput_SBUS.h b/libraries/AP_HAL_Linux/RCInput_SBUS.h index 3eb128d006..317b9edd37 100644 --- a/libraries/AP_HAL_Linux/RCInput_SBUS.h +++ b/libraries/AP_HAL_Linux/RCInput_SBUS.h @@ -17,7 +17,8 @@ #include #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \ - CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO + CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO || \ + CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ #include "RCInput.h" @@ -35,6 +36,8 @@ private: const char *device_path = "/dev/ttyS1"; #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO const char *device_path = "/dev/uart-sbus"; +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ + const char *device_path = "/dev/ttyS2"; #else const char *device_path = nullptr; #endif diff --git a/libraries/AP_HAL_Linux/RCInput_ZYNQ.cpp b/libraries/AP_HAL_Linux/RCInput_ZYNQ.cpp index 675235ba96..e309c2c307 100644 --- a/libraries/AP_HAL_Linux/RCInput_ZYNQ.cpp +++ b/libraries/AP_HAL_Linux/RCInput_ZYNQ.cpp @@ -16,7 +16,11 @@ #include "GPIO.h" +#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ +#define RCIN_ZYNQ_PULSE_INPUT_BASE 0x43c70000 +#else #define RCIN_ZYNQ_PULSE_INPUT_BASE 0x43c10000 +#endif extern const AP_HAL::HAL& hal; diff --git a/libraries/AP_HAL_Linux/RCInput_ZYNQ.h b/libraries/AP_HAL_Linux/RCInput_ZYNQ.h index a903e7efb4..1651a4342a 100644 --- a/libraries/AP_HAL_Linux/RCInput_ZYNQ.h +++ b/libraries/AP_HAL_Linux/RCInput_ZYNQ.h @@ -15,8 +15,13 @@ public: void _timer_tick(void); private: +#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ + static const int TICK_PER_US=50; + static const int TICK_PER_S=50000000; +#else static const int TICK_PER_US=100; static const int TICK_PER_S=100000000; +#endif // Memory mapped keyhole register to pulse input FIFO volatile uint32_t *pulse_input; diff --git a/libraries/AP_HAL_Linux/RCOutput_ZYNQ.h b/libraries/AP_HAL_Linux/RCOutput_ZYNQ.h index e38a4ecdf0..56c40f7bdf 100644 --- a/libraries/AP_HAL_Linux/RCOutput_ZYNQ.h +++ b/libraries/AP_HAL_Linux/RCOutput_ZYNQ.h @@ -20,8 +20,13 @@ public: void push(void) override; private: +#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ + static const int TICK_PER_US=50; + static const int TICK_PER_S=50000000; +#else static const int TICK_PER_US=100; static const int TICK_PER_S=100000000; +#endif // Period|Hi 32 bits each struct s_period_hi { diff --git a/libraries/AP_HAL_Linux/SPIDevice.cpp b/libraries/AP_HAL_Linux/SPIDevice.cpp index 6cfd0e809b..f8eeb8dae1 100644 --- a/libraries/AP_HAL_Linux/SPIDevice.cpp +++ b/libraries/AP_HAL_Linux/SPIDevice.cpp @@ -107,6 +107,12 @@ SPIDesc SPIDeviceManager::_device[] = { SPIDesc("lsm9ds0_g", 0, 0, SPI_MODE_3, 8, RPI_GPIO_12, 10*MHZ, 10*MHZ), SPIDesc("raspio", 0, 0, SPI_MODE_3, 8, RPI_GPIO_7, 10*MHZ, 10*MHZ), }; +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ +SPIDesc SPIDeviceManager::_device[] = { + /* MPU9250 is restricted to 1MHz for non-data and interrupt registers */ + SPIDesc("mpu9250", 1, 0, SPI_MODE_3, 8, SPI_CS_KERNEL, 1*MHZ, 10*MHZ), + SPIDesc("ms5611", 1, 1, SPI_MODE_3, 8, SPI_CS_KERNEL, 1*MHZ, 10*MHZ), +}; #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BH SPIDesc SPIDeviceManager::_device[] = { SPIDesc("mpu9250", 0, 0, SPI_MODE_0, 8, RPI_GPIO_7, 1*MHZ, 11*MHZ),