Skip to content

Commit d9d2827

Browse files
committed
[bsp][n32] 适配serial_v2,没有经过测试
1 parent e0c7503 commit d9d2827

File tree

2 files changed

+59
-17
lines changed

2 files changed

+59
-17
lines changed

bsp/n32/libraries/n32_drivers/drv_usart_v2.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ static rt_err_t n32_configure(struct rt_serial_device *serial, struct serial_con
777777
USART_Init(uart->handle.Instance, &uart->handle.Init);
778778
USART_Enable(uart->handle.Instance, ENABLE);
779779
#ifdef RT_SERIAL_USING_DMA
780-
uart->dma_rx.remaining_cnt = serial->config.rx_bufsz;
780+
uart->dma_rx.remaining_cnt = serial->config.dma_ping_bufsz;
781781
#endif
782782

783783
return RT_EOK;
@@ -964,7 +964,7 @@ static void dma_recv_isr(struct rt_serial_device *serial, rt_uint8_t isr_flag)
964964
if (counter <= uart->dma_rx.remaining_cnt)
965965
recv_len = uart->dma_rx.remaining_cnt - counter;
966966
else
967-
recv_len = serial->config.rx_bufsz + uart->dma_rx.remaining_cnt - counter;
967+
recv_len = serial->config.dma_ping_bufsz + uart->dma_rx.remaining_cnt - counter;
968968
break;
969969

970970
case UART_RX_DMA_IT_HT_FLAG:
@@ -974,7 +974,7 @@ static void dma_recv_isr(struct rt_serial_device *serial, rt_uint8_t isr_flag)
974974

975975
case UART_RX_DMA_IT_TC_FLAG:
976976
if (counter >= uart->dma_rx.remaining_cnt)
977-
recv_len = serial->config.rx_bufsz + uart->dma_rx.remaining_cnt - counter;
977+
recv_len = serial->config.dma_ping_bufsz + uart->dma_rx.remaining_cnt - counter;
978978

979979
default:
980980
break;
@@ -1003,22 +1003,15 @@ static void uart_isr(struct rt_serial_device *serial)
10031003
/* If the Read data register is not empty and the RXNE interrupt is enabled (RDR) */
10041004
if (USART_GetIntStatus(uart->handle.Instance, USART_INT_RXDNE) != RESET && USART_GetFlagStatus(uart->handle.Instance, USART_FLAG_RXDNE) != RESET)
10051005
{
1006-
struct rt_serial_rx_fifo *rx_fifo;
1007-
1008-
rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
1009-
RT_ASSERT(rx_fifo != RT_NULL);
1010-
rt_ringbuffer_putchar(&(rx_fifo->rb), (rt_uint8_t)(uart->handle.Instance->DAT & (rt_uint16_t)0x01FF));
1006+
char chr = uart->handle.Instance->DAT & (rt_uint16_t)0x01FF;
1007+
rt_hw_serial_control_isr(serial, RT_HW_SERIAL_CTRL_PUTC, &chr);
10111008
rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
10121009
}
10131010
/* If the Transmit data register is empty and the TXE interrupt enable is enabled (TDR)*/
10141011
else if (USART_GetIntStatus(uart->handle.Instance, USART_INT_TXDE) != RESET && USART_GetFlagStatus(uart->handle.Instance, USART_FLAG_TXDE) != RESET)
10151012
{
1016-
struct rt_serial_tx_fifo *tx_fifo;
1017-
1018-
tx_fifo = (struct rt_serial_tx_fifo *)serial->serial_tx;
1019-
RT_ASSERT(tx_fifo != RT_NULL);
10201013
rt_uint8_t put_char = 0;
1021-
if (rt_ringbuffer_getchar(&(tx_fifo->rb), &put_char))
1014+
if (rt_hw_serial_control_isr(serial, RT_HW_SERIAL_CTRL_GETC, &put_char) == RT_EOK)
10221015
{
10231016
USART_SendData(uart->handle.Instance, put_char);
10241017
}
@@ -1380,6 +1373,7 @@ static void n32_uart_get_config(void)
13801373
uart_obj[UART1_INDEX].uart_dma_flag = 0;
13811374
#ifdef BSP_UART1_RX_USING_DMA
13821375
uart_obj[UART1_INDEX].handle.HDMA_Rx = &uart_obj[UART1_INDEX].dma_rx.handle;
1376+
uart_obj[UART1_INDEX].serial.config.dma_ping_bufsz = BSP_UART1_DMA_PING_BUFSIZE;
13831377
uart_obj[UART1_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
13841378
uart_obj[UART1_INDEX].dma_rx.handle.Parent = &uart_obj[UART1_INDEX].handle;
13851379
uart_obj[UART1_INDEX].dma_rx.handle.Instance = DMA1_CH5;
@@ -1404,6 +1398,7 @@ static void n32_uart_get_config(void)
14041398
uart_obj[UART2_INDEX].uart_dma_flag = 0;
14051399
#ifdef BSP_UART2_RX_USING_DMA
14061400
uart_obj[UART2_INDEX].handle.HDMA_Rx = &uart_obj[UART2_INDEX].dma_rx.handle;
1401+
uart_obj[UART2_INDEX].serial.config.dma_ping_bufsz = BSP_UART2_DMA_PING_BUFSIZE;
14071402
uart_obj[UART2_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
14081403
uart_obj[UART2_INDEX].dma_rx.handle.Parent = &uart_obj[UART2_INDEX].handle;
14091404
uart_obj[UART2_INDEX].dma_rx.handle.Instance = DMA1_CH6;
@@ -1428,6 +1423,7 @@ static void n32_uart_get_config(void)
14281423
uart_obj[UART3_INDEX].uart_dma_flag = 0;
14291424
#ifdef BSP_UART3_RX_USING_DMA
14301425
uart_obj[UART3_INDEX].handle.HDMA_Rx = &uart_obj[UART3_INDEX].dma_rx.handle;
1426+
uart_obj[UART3_INDEX].serial.config.dma_ping_bufsz = BSP_UART3_DMA_PING_BUFSIZE;
14311427
uart_obj[UART3_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
14321428
uart_obj[UART3_INDEX].dma_rx.handle.Parent = &uart_obj[UART3_INDEX].handle;
14331429
uart_obj[UART3_INDEX].dma_rx.handle.Instance = DMA1_CH3;
@@ -1452,6 +1448,7 @@ static void n32_uart_get_config(void)
14521448
uart_obj[UART4_INDEX].uart_dma_flag = 0;
14531449
#ifdef BSP_UART4_RX_USING_DMA
14541450
uart_obj[UART4_INDEX].handle.HDMA_Rx = &uart_obj[UART4_INDEX].dma_rx.handle;
1451+
uart_obj[UART4_INDEX].serial.config.dma_ping_bufsz = BSP_UART4_DMA_PING_BUFSIZE;
14551452
uart_obj[UART4_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
14561453
uart_obj[UART4_INDEX].dma_rx.handle.Parent = &uart_obj[UART4_INDEX].handle;
14571454
uart_obj[UART4_INDEX].dma_rx.handle.Instance = DMA2_CH3;
@@ -1476,6 +1473,7 @@ static void n32_uart_get_config(void)
14761473
uart_obj[UART5_INDEX].uart_dma_flag = 0;
14771474
#ifdef BSP_UART5_RX_USING_DMA
14781475
uart_obj[UART5_INDEX].handle.HDMA_Rx = &uart_obj[UART5_INDEX].dma_rx.handle;
1476+
uart_obj[UART5_INDEX].serial.config.dma_ping_bufsz = BSP_UART5_DMA_PING_BUFSIZE;
14791477
uart_obj[UART5_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
14801478
uart_obj[UART5_INDEX].dma_rx.handle.Parent = &uart_obj[UART5_INDEX].handle;
14811479
uart_obj[UART5_INDEX].dma_rx.handle.Instance = DMA1_CH8;
@@ -1500,6 +1498,7 @@ static void n32_uart_get_config(void)
15001498
uart_obj[UART6_INDEX].uart_dma_flag = 0;
15011499
#ifdef BSP_UART6_RX_USING_DMA
15021500
uart_obj[UART6_INDEX].handle.HDMA_Rx = &uart_obj[UART6_INDEX].dma_rx.handle;
1501+
uart_obj[UART6_INDEX].serial.config.dma_ping_bufsz = BSP_UART6_DMA_PING_BUFSIZE;
15031502
uart_obj[UART6_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
15041503
uart_obj[UART6_INDEX].dma_rx.handle.Parent = &uart_obj[UART6_INDEX].handle;
15051504
uart_obj[UART6_INDEX].dma_rx.handle.Instance = DMA2_CH1;
@@ -1524,6 +1523,7 @@ static void n32_uart_get_config(void)
15241523
uart_obj[UART7_INDEX].uart_dma_flag = 0;
15251524
#ifdef BSP_UART7_RX_USING_DMA
15261525
uart_obj[UART7_INDEX].handle.HDMA_Rx = &uart_obj[UART7_INDEX].dma_rx.handle;
1526+
uart_obj[UART7_INDEX].serial.config.dma_ping_bufsz = BSP_UART7_DMA_PING_BUFSIZE;
15271527
uart_obj[UART7_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
15281528
uart_obj[UART7_INDEX].dma_rx.handle.Parent = &uart_obj[UART7_INDEX].handle;
15291529
uart_obj[UART7_INDEX].dma_rx.handle.Instance = DMA2_CH6;
@@ -1544,7 +1544,6 @@ static void n32_uart_get_config(void)
15441544
#ifdef RT_SERIAL_USING_DMA
15451545
static void n32_uart_dma_config(struct rt_serial_device *serial, rt_ubase_t flag)
15461546
{
1547-
struct rt_serial_rx_fifo *rx_fifo;
15481547
struct DMA_HandleTypeDef *DMA_Handle;
15491548
struct n32_uart *uart;
15501549

@@ -1555,7 +1554,6 @@ static void n32_uart_dma_config(struct rt_serial_device *serial, rt_ubase_t flag
15551554
if (RT_DEVICE_FLAG_DMA_RX == flag)
15561555
{
15571556
DMA_Handle = &uart->dma_rx.handle;
1558-
rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
15591557
}
15601558
else /* RT_DEVICE_FLAG_DMA_TX == flag */
15611559
{
@@ -1572,9 +1570,11 @@ static void n32_uart_dma_config(struct rt_serial_device *serial, rt_ubase_t flag
15721570
DMA_Handle->Init.Mem2Mem = DMA_M2M_DISABLE;
15731571
if (RT_DEVICE_FLAG_DMA_RX == flag)
15741572
{
1573+
rt_uint8_t *ptr = NULL;
1574+
rt_hw_serial_control_isr(serial, RT_HW_SERIAL_CTRL_GET_DMA_PING_BUF, &ptr);
15751575
DMA_Handle->Init.Direction = DMA_DIR_PERIPH_SRC;
1576-
DMA_Handle->Init.MemAddr = (unsigned int)rx_fifo->buffer;
1577-
DMA_Handle->Init.BufSize = serial->config.rx_bufsz;
1576+
DMA_Handle->Init.MemAddr = (unsigned int)ptr;
1577+
DMA_Handle->Init.BufSize = serial->config.dma_ping_bufsz;
15781578
DMA_Handle->Init.CircularMode = DMA_MODE_CIRCULAR;
15791579
DMA_Handle->Init.Priority = DMA_PRIORITY_VERY_HIGH;
15801580
}

bsp/n32/n32g45xvl-stb/board/Kconfig

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ menu "On-chip Peripheral Drivers"
5454
depends on BSP_USING_USART1 && RT_SERIAL_USING_DMA
5555
default n
5656

57+
config BSP_UART1_DMA_PING_BUFSIZE
58+
int "Set UART1 RX DMA ping-pong buffer size"
59+
range 16 65535
60+
depends on RT_USING_SERIAL_V2 && BSP_UART1_RX_USING_DMA
61+
default 32
62+
5763
config BSP_UART1_RX_BUFSIZE
5864
int "Set rx buffer size"
5965
range 0 16384
@@ -102,6 +108,12 @@ menu "On-chip Peripheral Drivers"
102108
depends on BSP_USING_USART2 && RT_SERIAL_USING_DMA
103109
default n
104110

111+
config BSP_UART2_DMA_PING_BUFSIZE
112+
int "Set UART2 RX DMA ping-pong buffer size"
113+
range 16 65535
114+
depends on RT_USING_SERIAL_V2 && BSP_UART2_RX_USING_DMA
115+
default 32
116+
105117
config BSP_UART2_RX_BUFSIZE
106118
int "Set rx buffer size"
107119
range 256 16384
@@ -146,6 +158,12 @@ menu "On-chip Peripheral Drivers"
146158
depends on BSP_USING_USART3 && RT_SERIAL_USING_DMA
147159
default n
148160

161+
config BSP_UART3_DMA_PING_BUFSIZE
162+
int "Set UART3 RX DMA ping-pong buffer size"
163+
range 16 65535
164+
depends on RT_USING_SERIAL_V2 && BSP_UART3_RX_USING_DMA
165+
default 32
166+
149167
config BSP_UART3_RX_BUFSIZE
150168
int "Set rx buffer size"
151169
range 256 16384
@@ -194,6 +212,12 @@ menu "On-chip Peripheral Drivers"
194212
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
195213
default n
196214

215+
config BSP_UART4_DMA_PING_BUFSIZE
216+
int "Set UART4 RX DMA ping-pong buffer size"
217+
range 16 65535
218+
depends on RT_USING_SERIAL_V2 && BSP_UART4_RX_USING_DMA
219+
default 32
220+
197221
config BSP_UART4_RX_BUFSIZE
198222
int "Set rx buffer size"
199223
range 256 16384
@@ -242,6 +266,12 @@ menu "On-chip Peripheral Drivers"
242266
depends on BSP_USING_UART5 && RT_SERIAL_USING_DMA
243267
default n
244268

269+
config BSP_UART5_DMA_PING_BUFSIZE
270+
int "Set UART5 RX DMA ping-pong buffer size"
271+
range 16 65535
272+
depends on RT_USING_SERIAL_V2 && BSP_UART5_RX_USING_DMA
273+
default 32
274+
245275
config BSP_UART5_RX_BUFSIZE
246276
int "Set rx buffer size"
247277
range 256 16384
@@ -286,6 +316,12 @@ menu "On-chip Peripheral Drivers"
286316
depends on BSP_USING_UART6 && RT_SERIAL_USING_DMA
287317
default n
288318

319+
config BSP_UART6_DMA_PING_BUFSIZE
320+
int "Set UART6 RX DMA ping-pong buffer size"
321+
range 16 65535
322+
depends on RT_USING_SERIAL_V2 && BSP_UART6_RX_USING_DMA
323+
default 32
324+
289325
config BSP_UART6_RX_BUFSIZE
290326
int "Set rx buffer size"
291327
range 256 16384
@@ -330,6 +366,12 @@ menu "On-chip Peripheral Drivers"
330366
depends on BSP_USING_UART7 && RT_SERIAL_USING_DMA
331367
default n
332368

369+
config BSP_UART7_DMA_PING_BUFSIZE
370+
int "Set UART7 RX DMA ping-pong buffer size"
371+
range 16 65535
372+
depends on RT_USING_SERIAL_V2 && BSP_UART7_RX_USING_DMA
373+
default 32
374+
333375
config BSP_UART7_RX_BUFSIZE
334376
int "Set rx buffer size"
335377
range 256 16384

0 commit comments

Comments
 (0)