void uart_init(UART_NO uart_no,uint32_t bound, uint32_t WordLength, uint32_t parity, uint32_t stop_bits)
{
switch(uart_no)
{
case UART_0:
CLK_EnableModuleClock(UART0_MODULE);//使能串口时钟
CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
//设置串口接收、发送引脚
SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
//复位串口
SYS_ResetModule(UART0_RST);
UART_Open(UART0, bound);//默认8个数据长度,无奇偶校验,1个停止位
UART_SetLine_Config(UART0,bound,WordLength,parity,stop_bits);//配置串口
//配置串口接收模式
UART0->FCR|=0X3<<4; //配置fifo中断等级为14字节
UART_SetTimeoutCnt(UART0, 40);//设置接收超时时间为40,单位波特率
/*使能接收FIFO 阀值中断,和接收超时中断*/
UART_ENABLE_INT(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
NVIC_EnableIRQ(UART02_IRQn);
break;
case UART_1:
CLK_EnableModuleClock(UART1_MODULE);//使能串口时钟
CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
//设置串口接收、发送引脚
SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB4_Msk | SYS_GPB_MFP_PB5_Msk);
SYS->GPB_MFP |= SYS_GPB_MFP_PB4_UART1_RXD | SYS_GPB_MFP_PB5_UART1_TXD;
//复位串口
SYS_ResetModule(UART1_RST);
UART_Open(UART1, bound);//默认8个数据长度,无奇偶校验,1个停止位
UART_SetLine_Config(UART1,bound,WordLength,parity,stop_bits);//配置串口
//配置串口接收模式
UART1->FCR|=0X3<<4; //配置fifo中断等级为14字节
UART_SetTimeoutCnt(UART1, 40);//设置接收超时时间为40,单位波特率
/*使能接收FIFO 阀值中断,和接收超时中断*/
UART_ENABLE_INT(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
NVIC_EnableIRQ(UART1_IRQn);
break;
case UART_2:
CLK_EnableModuleClock(UART2_MODULE);//使能串口时钟
CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
//设置串口接收、发送引脚
SYS->GPB_MFP &= ~(SYS_GPD_MFP_PD14_Msk | SYS_GPD_MFP_PD15_Msk);
SYS->GPB_MFP |= SYS_GPD_MFP_PD14_UART2_RXD | SYS_GPD_MFP_PD15_UART2_TXD;
//复位串口
SYS_ResetModule(UART2_RST);
UART_Open(UART2, bound);//默认8个数据长度,无奇偶校验,1个停止位
UART_SetLine_Config(UART2,bound,WordLength,parity,stop_bits);//配置串口
//配置串口接收模式
UART2->FCR|=0X3<<4; //配置fifo中断等级为14字节
UART_SetTimeoutCnt(UART2, 40);//设置接收超时时间为40,单位波特率
/*使能接收FIFO 阀值中断,和接收超时中断*/
UART_ENABLE_INT(UART2, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
break;
case UART_3:
CLK_EnableModuleClock(UART3_MODULE);//使能串口时钟
CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
//设置串口接收、发送引脚
SYS->GPB_MFP &= ~(SYS_GPA_MFP_PA3_Msk | SYS_GPA_MFP_PA2_Msk);
SYS->GPB_MFP |= SYS_GPA_MFP_PA3_UART3_RXD | SYS_GPA_MFP_PA2_UART3_TXD;
//复位串口
SYS_ResetModule(UART3_RST);
UART_Open(UART3, bound);//默认8个数据长度,无奇偶校验,1个停止位
UART_SetLine_Config(UART3,bound,WordLength,parity,stop_bits);//配置串口
//配置串口接收中断
UART_ENABLE_INT(UART3, UART_IER_RDA_IEN_Msk);
NVIC_EnableIRQ(UART3_IRQn);
break;
case UART_4:
CLK_EnableModuleClock(UART4_MODULE);//使能串口时钟
CLK_SetModuleClock(UART4_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
//设置串口接收、发送引脚
SYS->GPB_MFP &= ~(SYS_GPC_MFP_PC7_Msk | SYS_GPC_MFP_PC6_Msk);
SYS->GPB_MFP |= SYS_GPC_MFP_PC7_UART4_RXD | SYS_GPC_MFP_PC6_UART4_TXD;
//复位串口
SYS_ResetModule(UART4_RST);
UART_Open(UART4, bound);//默认8个数据长度,无奇偶校验,1个停止位
UART_SetLine_Config(UART4,bound,WordLength,parity,stop_bits);//配置串口
//配置串口接收中断
UART_ENABLE_INT(UART4, UART_IER_RDA_IEN_Msk);
NVIC_EnableIRQ(UART4_IRQn);
break;
case UART_5:
CLK_EnableModuleClock(UART5_MODULE);//使能串口时钟
CLK_SetModuleClock(UART5_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
//设置串口接收、发送引脚
SYS->GPB_MFP &= ~(SYS_GPA_MFP_PA1_Msk | SYS_GPA_MFP_PA0_Msk);
SYS->GPB_MFP |= SYS_GPA_MFP_PA1_UART5_RXD | SYS_GPA_MFP_PA0_UART5_TXD;
//复位串口
SYS_ResetModule(UART5_RST);
UART_Open(UART5, bound);//默认8个数据长度,无奇偶校验,1个停止位
UART_SetLine_Config(UART5,bound,WordLength,parity,stop_bits);//配置串口
//配置串口接收中断
UART_ENABLE_INT(UART5, UART_IER_RDA_IEN_Msk);
NVIC_EnableIRQ(UART5_IRQn);
break;
case UART_6:
break;
case UART_7:
break;
default:
break;
}
}