Skip to content

Commit

Permalink
[bsp][gd32] 修复串口驱动中由于可能的中断嵌套而导致RB索引异常的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
WKJay committed May 2, 2024
1 parent 2c9b7c1 commit b632dc1
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,13 +233,14 @@ static void dma_recv_isr (struct rt_serial_device *serial)
{
struct gd32_uart *uart;
rt_size_t recv_len, counter;
rt_base_t level;

RT_ASSERT(serial != RT_NULL);
uart = rt_container_of(serial, struct gd32_uart, serial);

recv_len = 0;
level = rt_hw_interrupt_disable();
counter = dma_transfer_number_get(uart->dma.rx.periph, uart->dma.rx.channel);

if (counter <= uart->dma.last_index)
{
recv_len = uart->dma.last_index - counter;
Expand All @@ -248,10 +249,11 @@ static void dma_recv_isr (struct rt_serial_device *serial)
{
recv_len = serial->config.rx_bufsz + uart->dma.last_index - counter;
}
uart->dma.last_index = counter;
rt_hw_interrupt_enable(level);

if (recv_len)
{
uart->dma.last_index = counter;
rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_DMADONE | (recv_len << 8));
}
}
Expand Down

0 comments on commit b632dc1

Please sign in to comment.