UART buffers for F4 should not be in CCM DATA RAM for DMA to wo… (#8924)
UART buffers for F4 should not be in CCM DATA RAM for DMA to work
This commit is contained in:
commit
a54c33b952
|
@ -170,7 +170,7 @@ typedef struct uartHardware_s {
|
||||||
uint8_t txPriority;
|
uint8_t txPriority;
|
||||||
uint8_t rxPriority;
|
uint8_t rxPriority;
|
||||||
|
|
||||||
#ifdef STM32H7
|
#if defined(STM32H7) || defined(STM32F4)
|
||||||
volatile uint8_t *txBuffer;
|
volatile uint8_t *txBuffer;
|
||||||
volatile uint8_t *rxBuffer;
|
volatile uint8_t *rxBuffer;
|
||||||
uint16_t txBufferSize;
|
uint16_t txBufferSize;
|
||||||
|
@ -188,8 +188,9 @@ typedef struct uartDevice_s {
|
||||||
const uartHardware_t *hardware;
|
const uartHardware_t *hardware;
|
||||||
uartPinDef_t rx;
|
uartPinDef_t rx;
|
||||||
uartPinDef_t tx;
|
uartPinDef_t tx;
|
||||||
#ifdef STM32H7
|
#if defined(STM32H7) || defined(STM32F4)
|
||||||
// For H7, buffers with possible DMA access is placed in D2 SRAM.
|
// For H7, buffers with possible DMA access is placed in D2 SRAM.
|
||||||
|
// For F4, buffers should NOT be in CCM DATA RAM (uartDevice is).
|
||||||
volatile uint8_t *rxBuffer;
|
volatile uint8_t *rxBuffer;
|
||||||
volatile uint8_t *txBuffer;
|
volatile uint8_t *txBuffer;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -39,6 +39,36 @@
|
||||||
#include "drivers/serial_uart.h"
|
#include "drivers/serial_uart.h"
|
||||||
#include "drivers/serial_uart_impl.h"
|
#include "drivers/serial_uart_impl.h"
|
||||||
|
|
||||||
|
#define UART_BUFFERS(n) \
|
||||||
|
volatile uint8_t uart ## n ## RxBuffer[UART_RX_BUFFER_SIZE]; \
|
||||||
|
volatile uint8_t uart ## n ## TxBuffer[UART_TX_BUFFER_SIZE]; struct dummy_s
|
||||||
|
|
||||||
|
#ifdef USE_UART1
|
||||||
|
UART_BUFFERS(1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_UART2
|
||||||
|
UART_BUFFERS(2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_UART3
|
||||||
|
UART_BUFFERS(3);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_UART4
|
||||||
|
UART_BUFFERS(4);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_UART5
|
||||||
|
UART_BUFFERS(5);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_UART6
|
||||||
|
UART_BUFFERS(6);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef UART_BUFFERS
|
||||||
|
|
||||||
const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
#ifdef USE_UART1
|
#ifdef USE_UART1
|
||||||
{
|
{
|
||||||
|
@ -65,7 +95,11 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
.rcc = RCC_APB2(USART1),
|
.rcc = RCC_APB2(USART1),
|
||||||
.irqn = USART1_IRQn,
|
.irqn = USART1_IRQn,
|
||||||
.txPriority = NVIC_PRIO_SERIALUART1_TXDMA,
|
.txPriority = NVIC_PRIO_SERIALUART1_TXDMA,
|
||||||
.rxPriority = NVIC_PRIO_SERIALUART1
|
.rxPriority = NVIC_PRIO_SERIALUART1,
|
||||||
|
.txBuffer = uart1TxBuffer,
|
||||||
|
.rxBuffer = uart1RxBuffer,
|
||||||
|
.txBufferSize = sizeof(uart1TxBuffer),
|
||||||
|
.rxBufferSize = sizeof(uart1RxBuffer),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -86,7 +120,11 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
.rcc = RCC_APB1(USART2),
|
.rcc = RCC_APB1(USART2),
|
||||||
.irqn = USART2_IRQn,
|
.irqn = USART2_IRQn,
|
||||||
.txPriority = NVIC_PRIO_SERIALUART2_TXDMA,
|
.txPriority = NVIC_PRIO_SERIALUART2_TXDMA,
|
||||||
.rxPriority = NVIC_PRIO_SERIALUART2
|
.rxPriority = NVIC_PRIO_SERIALUART2,
|
||||||
|
.txBuffer = uart2TxBuffer,
|
||||||
|
.rxBuffer = uart2RxBuffer,
|
||||||
|
.txBufferSize = sizeof(uart2TxBuffer),
|
||||||
|
.rxBufferSize = sizeof(uart2RxBuffer),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -107,7 +145,11 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
.rcc = RCC_APB1(USART3),
|
.rcc = RCC_APB1(USART3),
|
||||||
.irqn = USART3_IRQn,
|
.irqn = USART3_IRQn,
|
||||||
.txPriority = NVIC_PRIO_SERIALUART3_TXDMA,
|
.txPriority = NVIC_PRIO_SERIALUART3_TXDMA,
|
||||||
.rxPriority = NVIC_PRIO_SERIALUART3
|
.rxPriority = NVIC_PRIO_SERIALUART3,
|
||||||
|
.txBuffer = uart3TxBuffer,
|
||||||
|
.rxBuffer = uart3RxBuffer,
|
||||||
|
.txBufferSize = sizeof(uart3TxBuffer),
|
||||||
|
.rxBufferSize = sizeof(uart3RxBuffer),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -128,7 +170,11 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
.rcc = RCC_APB1(UART4),
|
.rcc = RCC_APB1(UART4),
|
||||||
.irqn = UART4_IRQn,
|
.irqn = UART4_IRQn,
|
||||||
.txPriority = NVIC_PRIO_SERIALUART4_TXDMA,
|
.txPriority = NVIC_PRIO_SERIALUART4_TXDMA,
|
||||||
.rxPriority = NVIC_PRIO_SERIALUART4
|
.rxPriority = NVIC_PRIO_SERIALUART4,
|
||||||
|
.txBuffer = uart4TxBuffer,
|
||||||
|
.rxBuffer = uart4RxBuffer,
|
||||||
|
.txBufferSize = sizeof(uart4TxBuffer),
|
||||||
|
.rxBufferSize = sizeof(uart4RxBuffer),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -149,7 +195,11 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
.rcc = RCC_APB1(UART5),
|
.rcc = RCC_APB1(UART5),
|
||||||
.irqn = UART5_IRQn,
|
.irqn = UART5_IRQn,
|
||||||
.txPriority = NVIC_PRIO_SERIALUART5_TXDMA,
|
.txPriority = NVIC_PRIO_SERIALUART5_TXDMA,
|
||||||
.rxPriority = NVIC_PRIO_SERIALUART5
|
.rxPriority = NVIC_PRIO_SERIALUART5,
|
||||||
|
.txBuffer = uart5TxBuffer,
|
||||||
|
.rxBuffer = uart5RxBuffer,
|
||||||
|
.txBufferSize = sizeof(uart5TxBuffer),
|
||||||
|
.rxBufferSize = sizeof(uart5RxBuffer),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -182,7 +232,11 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = {
|
||||||
.rcc = RCC_APB2(USART6),
|
.rcc = RCC_APB2(USART6),
|
||||||
.irqn = USART6_IRQn,
|
.irqn = USART6_IRQn,
|
||||||
.txPriority = NVIC_PRIO_SERIALUART6_TXDMA,
|
.txPriority = NVIC_PRIO_SERIALUART6_TXDMA,
|
||||||
.rxPriority = NVIC_PRIO_SERIALUART6
|
.rxPriority = NVIC_PRIO_SERIALUART6,
|
||||||
|
.txBuffer = uart6TxBuffer,
|
||||||
|
.rxBuffer = uart6RxBuffer,
|
||||||
|
.txBufferSize = sizeof(uart6TxBuffer),
|
||||||
|
.rxBufferSize = sizeof(uart6RxBuffer),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -231,10 +285,10 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode,
|
||||||
|
|
||||||
s->port.baudRate = baudRate;
|
s->port.baudRate = baudRate;
|
||||||
|
|
||||||
s->port.rxBuffer = uart->rxBuffer;
|
s->port.rxBuffer = hardware->rxBuffer;
|
||||||
s->port.txBuffer = uart->txBuffer;
|
s->port.txBuffer = hardware->txBuffer;
|
||||||
s->port.rxBufferSize = sizeof(uart->rxBuffer);
|
s->port.rxBufferSize = hardware->rxBufferSize;
|
||||||
s->port.txBufferSize = sizeof(uart->txBuffer);
|
s->port.txBufferSize = hardware->txBufferSize;
|
||||||
|
|
||||||
s->USARTx = hardware->reg;
|
s->USARTx = hardware->reg;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue