Merge pull request #2104 from mikeller/add_support_for_multiple_inverters

Added support for multiple serial inverters.
This commit is contained in:
Michael Keller 2017-01-15 14:14:50 +13:00 committed by GitHub
commit 8c571aff9e
20 changed files with 112 additions and 64 deletions

View File

@ -20,31 +20,98 @@
#include "platform.h"
#ifdef INVERTER
#include "io.h"
#include "io_impl.h"
#include "inverter.h"
/*
TODO: move this to support multiple inverters on different UARTs etc
possibly move to put it in the UART driver itself.
*/
static IO_t pin = IO_NONE;
void initInverter(void)
{
pin = IOGetByTag(IO_TAG(INVERTER));
IOInit(pin, OWNER_INVERTER, 1);
IOConfigGPIO(pin, IOCFG_OUT_PP);
inverterSet(false);
}
void inverterSet(bool on)
#ifdef USE_INVERTER
static void inverterSet(IO_t pin, bool on)
{
IOWrite(pin, on);
}
static void initInverter(ioTag_t ioTag)
{
IO_t pin = IOGetByTag(ioTag);
IOInit(pin, OWNER_INVERTER, 1);
IOConfigGPIO(pin, IOCFG_OUT_PP);
inverterSet(pin, false);
}
#endif
void initInverters(void)
{
#ifdef INVERTER_PIN_USART1
initInverter(IO_TAG(INVERTER_PIN_USART1));
#endif
#ifdef INVERTER_PIN_USART2
initInverter(IO_TAG(INVERTER_PIN_USART2));
#endif
#ifdef INVERTER_PIN_USART3
initInverter(IO_TAG(INVERTER_PIN_USART3));
#endif
#ifdef INVERTER_PIN_USART4
initInverter(IO_TAG(INVERTER_PIN_USART4));
#endif
#ifdef INVERTER_PIN_USART5
initInverter(IO_TAG(INVERTER_PIN_USART5));
#endif
#ifdef INVERTER_PIN_USART6
initInverter(IO_TAG(INVERTER_PIN_USART6));
#endif
}
void enableInverter(USART_TypeDef *USARTx, bool on)
{
#ifdef USE_INVERTER
IO_t pin = IO_NONE;
#ifdef INVERTER_PIN_USART1
if (USARTx == USART1) {
pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART1));
}
#endif
#ifdef INVERTER_PIN_USART2
if (USARTx == USART2) {
pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART2));
}
#endif
#ifdef INVERTER_PIN_USART3
if (USARTx == USART3) {
pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART3));
}
#endif
#ifdef INVERTER_PIN_USART4
if (USARTx == USART4) {
pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART4));
}
#endif
#ifdef INVERTER_PIN_USART5
if (USARTx == USART5) {
pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART5));
}
#endif
#ifdef INVERTER_PIN_USART6
if (USARTx == USART6) {
pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART6));
}
#endif
inverterSet(pin, on);
#else
UNUSED(USARTx);
UNUSED(on);
#endif
}

View File

@ -17,14 +17,10 @@
#pragma once
#ifdef INVERTER
void inverterSet(bool on);
#define INVERTER_OFF inverterSet(false)
#define INVERTER_ON inverterSet(true)
#else
#define INVERTER_OFF do {} while(0)
#define INVERTER_ON do {} while(0)
#if defined(INVERTER_PIN_USART1) || defined(INVERTER_PIN_USART2) || defined(INVERTER_PIN_USART3) || defined(INVERTER_PIN_USART4) || defined(INVERTER_PIN_USART5) || defined(INVERTER_PIN_USART6)
#define USE_INVERTER
#endif
void initInverter(void);
void initInverters(void);
void enableInverter(USART_TypeDef *USARTx, bool on);

View File

@ -36,15 +36,15 @@
#include "serial_uart_impl.h"
static void usartConfigurePinInversion(uartPort_t *uartPort) {
#if !defined(INVERTER) && !defined(STM32F303xC)
#if !defined(USE_INVERTER) && !defined(STM32F303xC)
UNUSED(uartPort);
#else
bool inverted = uartPort->port.options & SERIAL_INVERTED;
#ifdef INVERTER
if (inverted && uartPort->USARTx == INVERTER_USART) {
#ifdef USE_INVERTER
if (inverted) {
// Enable hardware inverter if available.
INVERTER_ON;
enableInverter(uartPort->USARTx, true);
}
#endif

View File

@ -308,8 +308,8 @@ void init(void)
beeperInit(beeperConfig());
#endif
/* temp until PGs are implemented. */
#ifdef INVERTER
initInverter();
#ifdef USE_INVERTER
initInverters();
#endif
#ifdef USE_BST

View File

@ -33,8 +33,7 @@
#define BEEPER PC13
#define BEEPER_INVERTED
#define INVERTER PC15
#define INVERTER_USART USART2
#define INVERTER_PIN_USART2 PC15
// MPU interrupt
#define USE_EXTI

View File

@ -38,8 +38,8 @@
#define BEEPER_OPT PB7
#define BEEPER_INVERTED
#define INVERTER PB15
#define INVERTER_USART USART6
#define INVERTER_PIN_USART6 PB15
//#define INVERTER_PIN_USART1 PC9
#define UART1_INVERTER PC9

View File

@ -19,8 +19,7 @@
#define LED0 PB3
#define INVERTER PB2 // PB2 (BOOT1) used as inverter select GPIO
#define INVERTER_USART USART1
#define INVERTER_PIN_USART1 PB2 // PB2 (BOOT1) used as inverter select GPIO
#define BEEPER PA15
#define BEEPER_OPT PA2

View File

@ -33,8 +33,7 @@
#define BEEPER PC5
#define INVERTER PB2 // PB2 used as inverter select GPIO
#define INVERTER_USART USART2
#define INVERTER_PIN_USART2 PB2 // PB2 used as inverter select GPIO
#define MPU6000_CS_PIN PC4
#define MPU6000_SPI_INSTANCE SPI1

View File

@ -28,8 +28,7 @@
#define BEEPER PE5
#define INVERTER PD3
#define INVERTER_USART USART6
#define INVERTER_PIN_USART6 PD3

View File

@ -28,8 +28,7 @@
#define BEEPER PC15
#define BEEPER_INVERTED
#define INVERTER PC8
#define INVERTER_USART USART6
#define INVERTER_PIN_USART6 PC8
#define USE_EXTI
#define MPU_INT_EXTI PC4

View File

@ -28,8 +28,7 @@
#define BEEPER PA8
#define BEEPER_INVERTED
#define INVERTER PC0 // PC0 used as inverter select GPIO
#define INVERTER_USART USART1
#define INVERTER_PIN_USART1 PC0 // PC0 used as inverter select GPIO
// MPU6000 interrupts
#define USE_EXTI

View File

@ -28,8 +28,7 @@
#define BEEPER PA8
#define INVERTER PC0 // PC0 used as inverter select GPIO
#define INVERTER_USART USART1
#define INVERTER_PIN_USART1 PC0 // PC0 used as inverter select GPIO
// MPU6000 interrupts
#define USE_EXTI

View File

@ -27,8 +27,7 @@
#define BARO_XCLR_PIN PC13
#define BARO_EOC_PIN PC14
#define INVERTER PB2 // PB2 (BOOT1) abused as inverter select GPIO
#define INVERTER_USART USART2
#define INVERTER_PIN_USART2 PB2 // PB2 (BOOT1) abused as inverter select GPIO
#define USE_EXTI
#define MAG_INT_EXTI PC14

View File

@ -44,8 +44,7 @@
//#define BARO_XCLR_PIN PC13
//#define BARO_EOC_PIN PC14
#define INVERTER PB2 // PB2 (BOOT1) abused as inverter select GPIO
#define INVERTER_USART USART2
#define INVERTER_PIN_USART2 PB2 // PB2 (BOOT1) abused as inverter select GPIO
#define USE_EXTI
#define MAG_INT_EXTI PC14

View File

@ -35,8 +35,7 @@
#define BEEPER PB4
#define BEEPER_INVERTED
#define INVERTER PC0 // PC0 used as inverter select GPIO
#define INVERTER_USART USART1
#define INVERTER_PIN_USART1 PC0 // PC0 used as inverter select GPIO
#define MPU6000_CS_PIN PA4
#define MPU6000_SPI_INSTANCE SPI1

View File

@ -69,8 +69,7 @@
#endif
// PC0 used as inverter select GPIO
#define INVERTER PC0
#define INVERTER_USART USART1
#define INVERTER_PIN_USART1 PC0
#define MPU6000_CS_PIN PA4
#define MPU6000_SPI_INSTANCE SPI1

View File

@ -30,8 +30,7 @@
#define BEEPER PC13
#define INVERTER PC15
#define INVERTER_USART USART2 //Sbus on USART 2 of nano.
#define INVERTER_PIN_USART2 PC15 //Sbus on USART 2 of nano.
#define MPU9250_CS_PIN PB12
#define MPU9250_SPI_INSTANCE SPI2

View File

@ -32,8 +32,7 @@
#define BEEPER PC9
#define BEEPER_INVERTED
#define INVERTER PC6
#define INVERTER_USART USART6
#define INVERTER_PIN_USART6 PC6
#define USE_ESC_SENSOR

View File

@ -27,8 +27,7 @@
#define BEEPER PA0
#define BEEPER_INVERTED
#define INVERTER PD7
#define INVERTER_USART USART6
#define INVERTER_PIN_USART6 PD7
#define MPU6500_CS_PIN PE10
#define MPU6500_SPI_INSTANCE SPI2

View File

@ -29,8 +29,7 @@
#define BEEPER PC9
//#define BEEPER_INVERTED
#define INVERTER PB15
#define INVERTER_USART USART6
#define INVERTER_PIN_USART6 PB15
// Gyro interrupt