[G4] Treat LPUART1 as UART9

This commit is contained in:
jflyper 2020-03-01 11:37:27 +09:00
parent 0f93dc9c88
commit fecc1a5ca8
10 changed files with 74 additions and 25 deletions

View File

@ -68,8 +68,8 @@ typedef struct dmaTimerMapping_s {
#define DMA_REQUEST_UART2_TX DMA_REQUEST_USART2_TX
#define DMA_REQUEST_UART3_RX DMA_REQUEST_USART3_RX
#define DMA_REQUEST_UART3_TX DMA_REQUEST_USART3_TX
#define DMA_REQUEST_UART6_RX DMA_REQUEST_LPUART1_RX
#define DMA_REQUEST_UART6_TX DMA_REQUEST_LPUART1_TX
#define DMA_REQUEST_UART9_RX DMA_REQUEST_LPUART1_RX
#define DMA_REQUEST_UART9_TX DMA_REQUEST_LPUART1_TX
static const dmaPeripheralMapping_t dmaPeripheralMapping[] = {
#ifdef USE_SPI
@ -102,8 +102,8 @@ static const dmaPeripheralMapping_t dmaPeripheralMapping[] = {
REQMAP_DIR(UART, 4, RX),
REQMAP_DIR(UART, 5, TX),
REQMAP_DIR(UART, 5, RX),
REQMAP_DIR(UART, 6, TX),
REQMAP_DIR(UART, 6, RX),
REQMAP_DIR(UART, 9, TX),
REQMAP_DIR(UART, 9, RX),
#endif
#ifdef USE_TIMER

View File

@ -205,6 +205,18 @@
# endif
#endif
#ifdef USE_UART9
# if !defined(UART9_RX_PIN)
# define UART9_RX_PIN NONE
# endif
# if !defined(UART9_TX_PIN)
# define UART9_TX_PIN NONE
# endif
# if !defined(INVERTER_PIN_UART9)
# define INVERTER_PIN_UART9 NONE
# endif
#endif
#ifdef USE_SOFTSERIAL1
# if !defined(SOFTSERIAL1_RX_PIN)
# define SOFTSERIAL1_RX_PIN NONE
@ -254,6 +266,9 @@ static const serialDefaultPin_t serialDefaultPin[] = {
#ifdef USE_UART8
{ SERIAL_PORT_USART8, IO_TAG(UART8_RX_PIN), IO_TAG(UART8_TX_PIN), IO_TAG(INVERTER_PIN_UART8) },
#endif
#ifdef USE_UART9
{ SERIAL_PORT_LPUART1, IO_TAG(UART9_RX_PIN), IO_TAG(UART9_TX_PIN), IO_TAG(INVERTER_PIN_UART9) },
#endif
#ifdef USE_SOFTSERIAL1
{ SERIAL_PORT_SOFTSERIAL1, IO_TAG(SOFTSERIAL1_RX_PIN), IO_TAG(SOFTSERIAL1_TX_PIN), IO_TAG(NONE) },
#endif

View File

@ -97,6 +97,10 @@ UART_BUFFERS(7);
UART_BUFFERS(8);
#endif
#ifdef USE_UART9
UART_BUFFERS(9);
#endif
#undef UART_BUFFERS
serialPort_t *uartOpen(UARTDevice_e device, serialReceiveCallbackPtr rxCallback, void *rxCallbackData, uint32_t baudRate, portMode_e mode, portOptions_e options)
@ -370,12 +374,8 @@ UART_IRQHandler(UART, 5, 5) // UART5 Rx/Tx IRQ Handler
#endif
#ifdef USE_UART6
#ifdef STM32G4
UART_IRQHandler(LPUART, 1, 6) // UART6 (implemented with LPUART1) Rx/Tx IRQ Handler
#else
UART_IRQHandler(USART, 6, 6) // USART6 Rx/Tx IRQ Handler
#endif
#endif
#ifdef USE_UART7
UART_IRQHandler(UART, 7, 7) // UART7 Rx/Tx IRQ Handler
@ -385,4 +385,8 @@ UART_IRQHandler(UART, 7, 7) // UART7 Rx/Tx IRQ Handler
UART_IRQHandler(UART, 8, 8) // UART8 Rx/Tx IRQ Handler
#endif
#ifdef USE_UART9
UART_IRQHandler(LPUART, 1, 9) // UART9 (implemented with LPUART1) Rx/Tx IRQ Handler
#endif
#endif // USE_UART

View File

@ -37,7 +37,8 @@ typedef enum {
UARTDEV_5 = 4,
UARTDEV_6 = 5,
UARTDEV_7 = 6,
UARTDEV_8 = 7
UARTDEV_8 = 7,
UARTDEV_9 = 8,
} UARTDevice_e;
typedef struct uartPort_s {

View File

@ -68,7 +68,7 @@
#define UART_TX_BUFFER_SIZE 256
#endif
#elif defined(STM32G4)
#define UARTDEV_COUNT_MAX 6
#define UARTDEV_COUNT_MAX 9 // UART1~5 + UART9 (Implemented with LPUART1)
#define UARTHARDWARE_MAX_PINS 3
#ifndef UART_RX_BUFFER_SIZE
#define UART_RX_BUFFER_SIZE 128
@ -130,7 +130,13 @@
#define UARTDEV_COUNT_8 0
#endif
#define UARTDEV_COUNT (UARTDEV_COUNT_1 + UARTDEV_COUNT_2 + UARTDEV_COUNT_3 + UARTDEV_COUNT_4 + UARTDEV_COUNT_5 + UARTDEV_COUNT_6 + UARTDEV_COUNT_7 + UARTDEV_COUNT_8)
#ifdef USE_UART9
#define UARTDEV_COUNT_9 1
#else
#define UARTDEV_COUNT_9 0
#endif
#define UARTDEV_COUNT (UARTDEV_COUNT_1 + UARTDEV_COUNT_2 + UARTDEV_COUNT_3 + UARTDEV_COUNT_4 + UARTDEV_COUNT_5 + UARTDEV_COUNT_6 + UARTDEV_COUNT_7 + UARTDEV_COUNT_8 + UARTDEV_COUNT_9)
typedef struct uartPinDef_s {
ioTag_t pin;
@ -252,4 +258,8 @@ UART_BUFFERS_EXTERN(7);
UART_BUFFERS_EXTERN(8);
#endif
#ifdef USE_UART9
UART_BUFFERS_EXTERN(9);
#endif
#undef UART_BUFFERS_EXTERN

View File

@ -67,11 +67,11 @@
#ifndef UART5_RX_DMA_CHANNEL
#define UART5_RX_DMA_CHANNEL NULL
#endif
#ifndef UART6_TX_DMA_CHANNEL
#define UART6_TX_DMA_CHANNEL NULL
#ifndef UART9_TX_DMA_CHANNEL
#define UART9_TX_DMA_CHANNEL NULL
#endif
#ifndef UART6_RX_DMA_CHANNEL
#define UART6_RX_DMA_CHANNEL NULL
#ifndef UART9_RX_DMA_CHANNEL
#define UART9_RX_DMA_CHANNEL NULL
#endif
const uartHardware_t uartHardware[UARTDEV_COUNT] = {
@ -222,16 +222,16 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
},
#endif
#ifdef USE_UART6
// On G474, UART6 is implemented as LPUART1
#ifdef USE_UART9
// On G474, UART9 is implemented as LPUART1
{
.device = UARTDEV_6,
.device = UARTDEV_9,
.reg = LPUART1,
#ifdef USE_DMA
.rxDMAChannel = DMA_REQUEST_LPUART1_RX,
.rxDMAResource = (dmaResource_t *)UART6_RX_DMA_CHANNEL,
.rxDMAResource = (dmaResource_t *)UART9_RX_DMA_CHANNEL,
.txDMAChannel = DMA_REQUEST_LPUART1_TX,
.txDMAResource = (dmaResource_t *)UART6_TX_DMA_CHANNEL,
.txDMAResource = (dmaResource_t *)UART9_TX_DMA_CHANNEL,
#endif
.rxPins = {
{ DEFIO_TAG_E(PA3), GPIO_AF12_LPUART1 },
@ -247,10 +247,10 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
.rxIrq = LPUART1_IRQn,
.txPriority = NVIC_PRIO_SERIALUART6_TXDMA,
.rxPriority = NVIC_PRIO_SERIALUART6,
.txBuffer = uart6TxBuffer,
.rxBuffer = uart6RxBuffer,
.txBufferSize = sizeof(uart6TxBuffer),
.rxBufferSize = sizeof(uart6RxBuffer),
.txBuffer = uart9TxBuffer,
.rxBuffer = uart9RxBuffer,
.txBufferSize = sizeof(uart9TxBuffer),
.rxBufferSize = sizeof(uart9RxBuffer),
},
#endif
};

View File

@ -93,6 +93,9 @@ const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT] = {
#ifdef USE_UART8
SERIAL_PORT_USART8,
#endif
#ifdef USE_UART9
SERIAL_PORT_LPUART1,
#endif
#ifdef USE_SOFTSERIAL1
SERIAL_PORT_SOFTSERIAL1,
#endif
@ -391,6 +394,9 @@ serialPort_t *openSerialPort(
#ifdef USE_UART8
case SERIAL_PORT_USART8:
#endif
#ifdef USE_UART9
case SERIAL_PORT_LPUART1:
#endif
#if defined(SIMULATOR_BUILD)
// emulate serial ports over TCP
serialPort = serTcpOpen(SERIAL_PORT_IDENTIFIER_TO_UARTDEV(identifier), rxCallback, rxCallbackData, baudRate, mode, options);

View File

@ -87,6 +87,7 @@ typedef enum {
SERIAL_PORT_USART6,
SERIAL_PORT_USART7,
SERIAL_PORT_USART8,
SERIAL_PORT_LPUART1,
SERIAL_PORT_USB_VCP = 20,
SERIAL_PORT_SOFTSERIAL1 = 30,
SERIAL_PORT_SOFTSERIAL2,
@ -95,7 +96,7 @@ typedef enum {
extern const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT];
#define SERIAL_PORT_IDENTIFIER_TO_INDEX(x) (((x) <= SERIAL_PORT_USART8) ? (x) : (RESOURCE_SOFT_OFFSET + ((x) - SERIAL_PORT_SOFTSERIAL1)))
#define SERIAL_PORT_IDENTIFIER_TO_INDEX(x) (((x) < RESOURCE_SOFT_OFFSET) ? (x) : (RESOURCE_SOFT_OFFSET + ((x) - SERIAL_PORT_SOFTSERIAL1)))
#define SERIAL_PORT_IDENTIFIER_TO_UARTDEV(x) ((x) - SERIAL_PORT_USART1 + UARTDEV_1)

View File

@ -68,6 +68,9 @@ static uartDmaopt_t uartDmaopt[] = {
#ifdef USE_UART8
{ UARTDEV_8, UART8_TX_DMA_OPT, UART8_RX_DMA_OPT },
#endif
#ifdef USE_UART9
{ UARTDEV_9, UART9_TX_DMA_OPT, UART9_RX_DMA_OPT },
#endif
};
void pgResetFn_serialUartConfig(serialUartConfig_t *config)

View File

@ -638,6 +638,15 @@
#endif
#endif
#ifdef USE_UART9
#ifndef UART9_TX_DMA_OPT
#define UART9_TX_DMA_OPT (DMA_OPT_UNUSED)
#endif
#ifndef UART9_RX_DMA_OPT
#define UART9_RX_DMA_OPT (DMA_OPT_UNUSED)
#endif
#endif
#ifndef RTC6705_CS_PIN
#define RTC6705_CS_PIN NONE
#endif