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