1 /********************************** (C) COPYRIGHT *******************************
2 * File Name          : CH57x_uart1.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  : UART1_DefInit
13 * Description    : 串口默认初始化配置
14 * Input          : None
15 * Return         : None
16 *******************************************************************************/
UART1_DefInit(void)17 void UART1_DefInit( void )
18 {
19     UART1_BaudRateCfg( 115200 );
20     R8_UART1_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN;       // FIFO打开,触发点4字节
21     R8_UART1_LCR = RB_LCR_WORD_SZ;
22     R8_UART1_IER = RB_IER_TXD_EN;
23     R8_UART1_DIV = 1;
24 }
25 
26 /*******************************************************************************
27 * Function Name  : UART1_BaudRateCfg
28 * Description    : 串口波特率配置
29 * Input          :
30 * Return         :
31 *******************************************************************************/
UART1_BaudRateCfg(UINT32 baudrate)32 void UART1_BaudRateCfg( UINT32 baudrate )
33 {
34     UINT32  x;
35 
36     x = 10 * GetSysClock() / 8 / baudrate;
37     x = ( x + 5 ) / 10;
38     R16_UART1_DL = (UINT16)x;
39 }
40 
41 /*******************************************************************************
42 * Function Name  : UART1_ByteTrigCfg
43 * Description    : 串口字节触发中断配置
44 * Input          : b: 触发字节数
45                     refer to UARTByteTRIGTypeDef
46 * Return         :
47 *******************************************************************************/
UART1_ByteTrigCfg(UARTByteTRIGTypeDef b)48 void UART1_ByteTrigCfg( UARTByteTRIGTypeDef b )
49 {
50     R8_UART1_FCR = (R8_UART1_FCR&~RB_FCR_FIFO_TRIG)|(b<<6);
51 }
52 
53 /*******************************************************************************
54 * Function Name  : UART1_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 *******************************************************************************/
UART1_INTCfg(UINT8 s,UINT8 i)66 void UART1_INTCfg( UINT8 s,  UINT8 i )
67 {
68     if( s )
69     {
70         R8_UART1_IER |= i;
71         R8_UART1_MCR |= RB_MCR_INT_OE;
72     }
73     else
74     {
75         R8_UART1_IER &= ~i;
76     }
77 }
78 
79 /*******************************************************************************
80 * Function Name  : UART1_Reset
81 * Description    : 串口软件复位
82 * Input          : None
83 * Return         : None
84 *******************************************************************************/
UART1_Reset(void)85 void UART1_Reset( void )
86 {
87     R8_UART1_IER = RB_IER_RESET;
88 }
89 
90 /*******************************************************************************
91 * Function Name  : UART1_SendString
92 * Description    : 串口多字节发送
93 * Input          : buf - 待发送的数据内容首地址
94                      l - 待发送的数据长度
95 * Return         : None
96 *******************************************************************************/
UART1_SendString(PUINT8 buf,UINT16 l)97 void UART1_SendString( PUINT8 buf, UINT16 l )
98 {
99     UINT16 len = l;
100 
101     while(len)
102     {
103         if(R8_UART1_TFC != UART_FIFO_SIZE)
104         {
105             R8_UART1_THR = *buf++;
106             len--;
107         }
108     }
109 }
110 
111 /*******************************************************************************
112 * Function Name  : UART1_RecvString
113 * Description    : 串口读取多字节
114 * Input          : buf - 读取数据存放缓存区首地址
115 * Return         : 读取数据长度
116 *******************************************************************************/
UART1_RecvString(PUINT8 buf)117 UINT16 UART1_RecvString( PUINT8 buf )
118 {
119     UINT16 len = 0;
120 
121     while( R8_UART1_RFC )
122     {
123         *buf++ = R8_UART1_RBR;
124         len ++;
125     }
126 
127     return (len);
128 }
129 
130 
131