Просмотр исходного кода

更新CPU和MCU工程的串口驱动:动态计算uart波特率的DLH值,以适配不同的串口波特率。

helen 1 месяц назад
Родитель
Сommit
828991fb27

+ 16 - 2
amt630hv160-freertos-beta/ArkmicroFiles/libcpu-amt630hv160/source/pinctrl.c

@@ -362,9 +362,9 @@ static const xPinGroup_t pin_groups[] = {
 	{.groupid = PGRP_SDMMC1, .pins_num = 7, .pins = {{58, 2}, {59, 2}, {60, 2}, {61, 2}, {62, 2}, {63, 2},{64, 2}}},
 	{.groupid = PGRP_ETH, .pins_num = 15, .pins = {
 #if ETH_TXC_PAD_DIR_OUTPUT
-					{0, 3}, 
+					{0, 3},
 #else
-					{0, 2}, 
+					{0, 2},
 #endif
 					{1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2},{6, 2},
 					{7, 2},{8, 2},{9, 2},{10, 2},{11, 2},{12, 2},{13, 2},{14, 2}}},
@@ -591,6 +591,7 @@ void vPinctrlSetup(void)
 #endif
 #endif
 
+#ifdef UART_DEBUG_PORT
 	if(UART_DEBUG_PORT == UART_ID0)
 		pinctrl_set_group(PGRP_UART0);
 	else if (UART_DEBUG_PORT == UART_ID1)
@@ -599,6 +600,19 @@ void vPinctrlSetup(void)
 		pinctrl_set_group(PGRP_UART2);
 	else if (UART_DEBUG_PORT == UART_ID3)
 		pinctrl_set_group(PGRP_UART3);
+#endif
+
+#ifdef UART_MCU_PORT
+    if(UART_MCU_PORT == UART_ID0)
+        pinctrl_set_group(PGRP_UART0);
+    else if (UART_MCU_PORT == UART_ID1)
+        pinctrl_set_group(PGRP_UART1);
+    else if (UART_MCU_PORT == UART_ID2)
+        pinctrl_set_group(PGRP_UART2);
+    else if (UART_MCU_PORT == UART_ID3)
+        pinctrl_set_group(PGRP_UART3);
+#endif
+
 #ifdef ETH_SUPPORT
 	pinctrl_set_group(PGRP_ETH);
 #endif

+ 2 - 2
amt630hv160-freertos-beta/ArkmicroFiles/libcpu-amt630hv160/source/uart.c

@@ -316,9 +316,9 @@ void vUartInit(UartPort_t *uap, uint32_t baud, uint32_t flags)
 	// baud = clk/(16*U_DLL)
 	//set baud rate
 	writel(readl(uap->regbase + UART485_LCR) | (1 << 7), uap->regbase + UART485_LCR);
-	writel(UART_CLK(CLK_UART0 + uap->id - UART_ID0) / (16 * baud), uap->regbase + UART485_DLL);
+	writel((UART_CLK(CLK_UART0 + uap->id - UART_ID0) / (16 * baud)) & 0xff, uap->regbase + UART485_DLL);
 	writel((UART_CLK(CLK_UART0 + uap->id - UART_ID0) / baud) & 0xf, uap->regbase + UART485_DLF);
-	writel(0, uap->regbase + UART485_DLH);
+	writel(((UART_CLK(CLK_UART0 + uap->id - UART_ID0) / (16 * baud)) >> 8) & 0xff, uap->regbase + UART485_DLH);
 	writel(readl(uap->regbase + UART485_LCR) & ~(1 << 7), uap->regbase + UART485_LCR);
 
 	cr = 0;

+ 2 - 2
amt630hv160-mcu/amt630hv160-mcu-iram/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_uart.c

@@ -155,9 +155,9 @@ void UART_Init(UART_TypeDef *uartx, u32 baud, u32 flags)
 	// baud = clk/(16*U_DLL)
 	//set baud rate
 	uartx->LCR = uartx->LCR | (1 << 7);
-	uartx->RBR_THR_DLL = UART_CLK_FREQ / (16 * baud);
+	uartx->RBR_THR_DLL = (UART_CLK_FREQ / (16 * baud)) & 0xff;
 	uartx->DLF = (UART_CLK_FREQ / baud) & 0xf;
-	uartx->DLH_IER = 0;
+	uartx->DLH_IER = ((UART_CLK_FREQ / (16 * baud)) >> 8) & 0xff;
 	uartx->LCR = uartx->LCR & ~(1 << 7);
 
 	cr = 0;

+ 2 - 2
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_uart.c

@@ -154,9 +154,9 @@ void UART_Init(UART_TypeDef *uartx, u32 baud, u32 flags)
 	// baud = clk/(16*U_DLL)
 	//set baud rate
 	uartx->LCR = uartx->LCR | (1 << 7);
-	uartx->RBR_THR_DLL = UART_CLK_FREQ / (16 * baud);
+	uartx->RBR_THR_DLL = (UART_CLK_FREQ / (16 * baud)) & 0xff;
 	uartx->DLF = (UART_CLK_FREQ / baud) & 0xf;
-	uartx->DLH_IER = 0;
+	uartx->DLH_IER = ((UART_CLK_FREQ / (16 * baud)) >> 8) & 0xff;
 	uartx->LCR = uartx->LCR & ~(1 << 7);
 
 	cr = 0;