@@ -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
15451545static 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 }
0 commit comments