1 /********************************** (C) COPYRIGHT ******************************* 2 * File Name : CH57x_uart2.c 3 * Author : WCH 4 * Version : V1.0 5 * Date : 2018/12/15 6 * Description 7 *******************************************************************************/ 8 9 #include "CH57x_common.h" 10 11 /******************************************************************************* 12 * Function Name : UART2_DefInit 13 * Description : 串口默认初始化配置 14 * Input : None 15 * Return : None 16 *******************************************************************************/ UART2_DefInit(void)17void UART2_DefInit( void ) 18 { 19 UART2_BaudRateCfg( 115200 ); 20 R8_UART2_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节 21 R8_UART2_LCR = RB_LCR_WORD_SZ; 22 R8_UART2_IER = RB_IER_TXD_EN; 23 R8_UART2_DIV = 1; 24 } 25 26 /******************************************************************************* 27 * Function Name : UART2_BaudRateCfg 28 * Description : 串口波特率配置 29 * Input : 30 * Return : 31 *******************************************************************************/ UART2_BaudRateCfg(UINT32 baudrate)32void UART2_BaudRateCfg( UINT32 baudrate ) 33 { 34 UINT32 x; 35 36 x = 10 * GetSysClock() / 8 / baudrate; 37 x = ( x + 5 ) / 10; 38 R16_UART2_DL = (UINT16)x; 39 } 40 41 /******************************************************************************* 42 * Function Name : UART2_ByteTrigCfg 43 * Description : 串口字节触发中断配置 44 * Input : b: 触发字节数 45 refer to UARTByteTRIGTypeDef 46 * Return : 47 *******************************************************************************/ UART2_ByteTrigCfg(UARTByteTRIGTypeDef b)48void UART2_ByteTrigCfg( UARTByteTRIGTypeDef b ) 49 { 50 R8_UART2_FCR = (R8_UART2_FCR&~RB_FCR_FIFO_TRIG)|(b<<6); 51 } 52 53 /******************************************************************************* 54 * Function Name : UART2_INTCfg 55 * Description : 串口中断配置 56 * Input : s: 中断控制状态 57 ENABLE - 使能相应中断 58 DISABLE - 关闭相应中断 59 i: 中断类型 60 RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持) 61 RB_IER_LINE_STAT - 接收线路状态中断 62 RB_IER_THR_EMPTY - 发送保持寄存器空中断 63 RB_IER_RECV_RDY - 接收数据中断 64 * Return : None 65 *******************************************************************************/ UART2_INTCfg(UINT8 s,UINT8 i)66void UART2_INTCfg( UINT8 s, UINT8 i ) 67 { 68 if( s ) 69 { 70 R8_UART2_IER |= i; 71 R8_UART2_MCR |= RB_MCR_INT_OE; 72 } 73 else 74 { 75 R8_UART2_IER &= ~i; 76 } 77 } 78 79 /******************************************************************************* 80 * Function Name : UART2_Reset 81 * Description : 串口软件复位 82 * Input : None 83 * Return : None 84 *******************************************************************************/ UART2_Reset(void)85void UART2_Reset( void ) 86 { 87 R8_UART2_IER = RB_IER_RESET; 88 } 89 90 /******************************************************************************* 91 * Function Name : UART2_SendString 92 * Description : 串口多字节发送 93 * Input : buf - 待发送的数据内容首地址 94 l - 待发送的数据长度 95 * Return : None 96 *******************************************************************************/ UART2_SendString(PUINT8 buf,UINT16 l)97void UART2_SendString( PUINT8 buf, UINT16 l ) 98 { 99 UINT16 len = l; 100 101 while(len) 102 { 103 if(R8_UART2_TFC != UART_FIFO_SIZE) 104 { 105 R8_UART2_THR = *buf++; 106 len--; 107 } 108 } 109 } 110 111 /******************************************************************************* 112 * Function Name : UART2_RecvString 113 * Description : 串口读取多字节 114 * Input : buf - 读取数据存放缓存区首地址 115 * Return : 读取数据长度 116 *******************************************************************************/ UART2_RecvString(PUINT8 buf)117UINT16 UART2_RecvString( PUINT8 buf ) 118 { 119 UINT16 len = 0; 120 121 while( R8_UART2_RFC ) 122 { 123 *buf++ = R8_UART2_RBR; 124 len ++; 125 } 126 127 return (len); 128 } 129 130 131