1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-19 14:25:20 +03:00

Updated timerHardware_t to drop pinsource, and use new IO tags.

This commit is contained in:
blckmn 2016-06-13 09:02:33 +10:00
parent 3815f77e77
commit 8b1cc05e1d
11 changed files with 120 additions and 123 deletions

View file

@ -30,7 +30,7 @@
#include "nvic.h"
#include "system.h"
#include "gpio.h"
#include "io.h"
#include "timer.h"
#include "serial.h"
@ -48,6 +48,8 @@
typedef struct softSerial_s {
serialPort_t port;
IO_t rxIO;
IO_t txIO;
const timerHardware_t *rxTimerHardware;
volatile uint8_t rxBuffer[SOFTSERIAL_BUFFER_SIZE];
@ -92,30 +94,24 @@ void setTxSignal(softSerial_t *softSerial, uint8_t state)
}
if (state) {
digitalHi(softSerial->txTimerHardware->gpio, softSerial->txTimerHardware->pin);
IOHi(softSerial->txIO);
} else {
digitalLo(softSerial->txTimerHardware->gpio, softSerial->txTimerHardware->pin);
IOLo(softSerial->txIO);
}
}
static void softSerialGPIOConfig(GPIO_TypeDef *gpio, uint16_t pin, GPIO_Mode mode)
static void softSerialGPIOConfig(ioTag_t pin, ioConfig_t mode)
{
gpio_config_t cfg;
cfg.pin = pin;
cfg.mode = mode;
cfg.speed = Speed_2MHz;
gpioInit(gpio, &cfg);
IOInit(IOGetByTag(pin), OWNER_SOFTSERIAL_RXTX, RESOURCE_USART);
IOConfigGPIO(IOGetByTag(pin), mode);
}
void serialInputPortConfig(const timerHardware_t *timerHardwarePtr)
void serialInputPortConfig(ioTag_t pin)
{
#ifdef STM32F10X
softSerialGPIOConfig(timerHardwarePtr->gpio, timerHardwarePtr->pin, Mode_IPU);
#ifdef STM32F1
softSerialGPIOConfig(pin, IOCFG_IPU);
#else
#ifdef STM32F303xC
softSerialGPIOConfig(timerHardwarePtr->gpio, timerHardwarePtr->pin, Mode_AF_PP_PU);
#endif
softSerialGPIOConfig(pin, IOCFG_AF_PP_UP);
#endif
}
@ -168,9 +164,9 @@ static void serialTimerRxConfig(const timerHardware_t *timerHardwarePtr, uint8_t
timerChConfigCallbacks(timerHardwarePtr, &softSerialPorts[reference].edgeCb, NULL);
}
static void serialOutputPortConfig(const timerHardware_t *timerHardwarePtr)
static void serialOutputPortConfig(ioTag_t pin)
{
softSerialGPIOConfig(timerHardwarePtr->gpio, timerHardwarePtr->pin, Mode_Out_PP);
softSerialGPIOConfig(pin, IOCFG_OUT_PP);
}
static void resetBuffers(softSerial_t *softSerial)
@ -222,8 +218,11 @@ serialPort_t *openSoftSerial(softSerialPortIndex_e portIndex, serialReceiveCallb
softSerial->softSerialPortIndex = portIndex;
serialOutputPortConfig(softSerial->txTimerHardware);
serialInputPortConfig(softSerial->rxTimerHardware);
softSerial->txIO = IOGetByTag(softSerial->txTimerHardware->pin);
serialOutputPortConfig(softSerial->txTimerHardware->pin);
softSerial->rxIO = IOGetByTag(softSerial->rxTimerHardware->pin);
serialInputPortConfig(softSerial->rxTimerHardware->pin);
setTxSignal(softSerial, ENABLE);
delay(50);