From 98a2b4d350b1a5b80a5d97c30cc44ad81d043bd2 Mon Sep 17 00:00:00 2001 From: dragonmux Date: Fri, 19 Aug 2022 10:53:31 +0100 Subject: [PATCH] aux_serial: Refined how flip-flopping between the two transmit buffers is achieved --- src/platforms/common/aux_serial.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/platforms/common/aux_serial.c b/src/platforms/common/aux_serial.c index 21a8915..300eef1 100644 --- a/src/platforms/common/aux_serial.c +++ b/src/platforms/common/aux_serial.c @@ -35,9 +35,8 @@ #include "aux_serial.h" #if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32F4) -static char aux_serial_transmit_buffer[TX_BUF_SIZE * 2]; -/* Active buffer part idx */ -static uint8_t buf_tx_act_idx; +static char aux_serial_transmit_buffer[TX_BUF_SIZE * 2U]; +static uint8_t aux_serial_transmit_buffer_index; #elif defined(LM4F) static char aux_serial_transmit_buffer[FIFO_SIZE]; #endif @@ -83,6 +82,11 @@ void aux_serial_set_encoding(struct usb_cdc_line_coding *coding) } #if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32F4) +char *aux_serial_current_transmit_buffer(void) +{ + return aux_serial_transmit_buffer + (aux_serial_transmit_buffer_index << USART_DMA_BUF_SHIFT); +} + /* * Changes USBUSART TX buffer in which data is accumulated from USB. * Filled buffer is submitted to DMA for transfer. @@ -90,7 +94,7 @@ void aux_serial_set_encoding(struct usb_cdc_line_coding *coding) void aux_serial_switch_transmit_buffers(void) { /* Select buffer for transmission */ - char *const tx_buf_ptr = &aux_serial_transmit_buffer[buf_tx_act_idx * TX_BUF_SIZE]; + char *const tx_buf_ptr = aux_serial_current_transmit_buffer(); /* Configure DMA */ dma_set_memory_address(USBUSART_DMA_BUS, USBUSART_DMA_TX_CHAN, (uintptr_t)tx_buf_ptr); @@ -99,12 +103,7 @@ void aux_serial_switch_transmit_buffers(void) /* Change active buffer */ buf_tx_act_sz = 0; - buf_tx_act_idx ^= 1; -} - -char *aux_serial_current_transmit_buffer(void) -{ - return aux_serial_transmit_buffer + (buf_tx_act_idx * TX_BUF_SIZE); + aux_serial_transmit_buffer_index ^= 1; } #elif defined(LM4F)