Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,6 @@ static void dma_recv_isr(struct rt_serial_device *serial, rt_uint8_t isr_flag)
RT_ASSERT(serial != RT_NULL);
uart = rt_container_of(serial, struct stm32_uart, serial);

recv_len = 0;
counter = __HAL_DMA_GET_COUNTER(&(uart->dma_rx.handle));

if (counter <= uart->dma_rx.remaining_cnt)
Expand Down
53 changes: 8 additions & 45 deletions components/drivers/serial/dev_serial_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -320,36 +320,6 @@ static void rt_serial_update_read_index(struct rt_ringbuffer *rb,
static void rt_serial_update_write_index(struct rt_ringbuffer *rb,
rt_uint16_t length)
{
#ifdef RT_SERIAL_BUF_STRATEGY_DROP
rt_uint16_t space_length;

RT_ASSERT(rb != RT_NULL);

/* whether has enough space */
space_length = rt_ringbuffer_space_len(rb);

/* no space */
if (space_length == 0)
return;

/* drop some data */
if (space_length < length)
length = space_length;

if (rb->buffer_size - rb->write_index > length)
{
/* this should not cause overflow because there is enough space for
* length of data in current mirror */
rb->write_index += length;
return;
}

/* we are going into the other side of the mirror */
rb->write_mirror = ~rb->write_mirror;
rb->write_index = length - (rb->buffer_size - rb->write_index);
return;

#else
rt_uint16_t space_length;
RT_ASSERT(rb != RT_NULL);

Expand Down Expand Up @@ -387,7 +357,6 @@ static void rt_serial_update_write_index(struct rt_ringbuffer *rb,
rb->read_index = rb->write_index;
}
return;
#endif /* RT_SERIAL_BUF_STRATEGY_DROP */
}
#endif /* RT_SERIAL_USING_DMA */

Expand Down Expand Up @@ -512,11 +481,11 @@ static rt_ssize_t _serial_fifo_rx(struct rt_device *dev,

if (dev->open_flag & RT_SERIAL_RX_BLOCKING)
{
rt_size_t data_len = 0;
rt_size_t data_len;
rt_tick_t now_tick;
rt_size_t rx_bufsz_third = serial->config.rx_bufsz / 2;
rt_int32_t base_rx_timeout = rt_atomic_load(&rx_fifo->rx_timeout);
rt_int32_t rx_timeout = base_rx_timeout;
rt_tick_t now_tick = 0;
rt_tick_t begin_tick = rt_tick_get();

while (1)
Expand Down Expand Up @@ -548,7 +517,6 @@ static rt_ssize_t _serial_fifo_rx(struct rt_device *dev,
break;
}


rt_completion_wait(&rx_fifo->rx_cpt, rx_timeout);
if (rx_timeout != RT_WAITING_FOREVER)
{
Expand Down Expand Up @@ -668,7 +636,6 @@ static rt_ssize_t _serial_fifo_tx_blocking_buf(struct rt_device *dev,
struct rt_serial_device *serial;
struct rt_serial_tx_fifo *tx_fifo;
rt_base_t level;
rt_size_t send_size = 0;

if (size == 0) return 0;
RT_ASSERT(dev != RT_NULL && buffer != RT_NULL);
Expand All @@ -690,10 +657,11 @@ static rt_ssize_t _serial_fifo_tx_blocking_buf(struct rt_device *dev,
return 0;
}

rt_tick_t now_tick;
rt_int32_t base_tx_timeout = rt_atomic_load(&tx_fifo->tx_timeout);
rt_int32_t tx_timeout = base_tx_timeout;
rt_tick_t now_tick = 0;
rt_tick_t begin_tick = rt_tick_get();
rt_size_t send_size = 0;

while (send_size != size)
{
Expand Down Expand Up @@ -1967,8 +1935,8 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
case RT_SERIAL_EVENT_RX_IND:
case RT_SERIAL_EVENT_RX_DMADONE: {
struct rt_serial_rx_fifo *rx_fifo;
rt_size_t rx_length = 0;
rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
rt_size_t rx_length;
rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);

#ifdef RT_SERIAL_USING_DMA
Expand All @@ -1985,16 +1953,15 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
rt_size_t space_len;
/* UART_IT_IDLE and dma isr */
level = rt_spin_lock_irqsave(&serial->spinlock);
rt_serial_update_write_index(&rx_fifo->dma_ping_rb, rx_length);
do
{
space_len = rt_ringbuffer_space_len(&rx_fifo->rb);
if (space_len == 0)
break;

rt_serial_update_write_index(&rx_fifo->dma_ping_rb, rx_length);

size = rt_ringbuffer_peek(&rx_fifo->dma_ping_rb, &ptr);
if (size == 0)
break;

space_len -= rt_ringbuffer_put(&rx_fifo->rb, ptr, size);
if (space_len == 0)
Expand All @@ -2006,8 +1973,6 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)

rt_ringbuffer_put(&rx_fifo->rb, ptr, size);
} while (0);
if (space_len == 0)
rt_serial_update_read_index(&rx_fifo->dma_ping_rb, rt_ringbuffer_get_size(&rx_fifo->dma_ping_rb));
rt_spin_unlock_irqrestore(&serial->spinlock, level);
#else
rt_uint8_t *ptr;
Expand All @@ -2018,8 +1983,6 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
do
{
size = rt_ringbuffer_peek(&rx_fifo->dma_ping_rb, &ptr);
if (size == 0)
break;

rt_ringbuffer_put_force(&rx_fifo->rb, ptr, size);

Expand Down