1 
2 
3 
4 #ifndef __CH57x_UART_H__
5 #define __CH57x_UART_H__
6 
7 #ifdef __cplusplus
8  extern "C" {
9 #endif
10 
11 #include "CH579SFR.h"
12 #include "core_cm0.h"
13 
14 
15 /**
16   * @brief  LINE error and status define
17   */
18 #define  STA_ERR_BREAK      RB_LSR_BREAK_ERR       // 数据间隔错误
19 #define  STA_ERR_FRAME      RB_LSR_FRAME_ERR       // 数据帧错误
20 #define  STA_ERR_PAR        RB_LSR_PAR_ERR         // 奇偶校验位出错
21 #define  STA_ERR_FIFOOV     RB_LSR_OVER_ERR        // 接收数据溢出
22 
23 #define  STA_TXFIFO_EMP     RB_LSR_TX_FIFO_EMP     // 当前发送FIFO空,可以继续填充发送数据
24 #define  STA_TXALL_EMP      RB_LSR_TX_ALL_EMP      // 当前所有发送数据都发送完成
25 #define  STA_RECV_DATA      RB_LSR_DATA_RDY        // 当前有接收到数据
26 
27 
28 /**
29   * @brief  Configuration UART TrigByte num
30   */
31 typedef enum
32 {
33     UART_1BYTE_TRIG = 0,        // 1字节触发
34     UART_2BYTE_TRIG,            // 2字节触发
35     UART_4BYTE_TRIG,            // 4字节触发
36     UART_7BYTE_TRIG,            // 7字节触发
37 
38 }UARTByteTRIGTypeDef;
39 
40 
41 /****************** UART0 */
42 void UART0_DefInit( void );                             /* 串口默认初始化配置 */
43 void UART0_BaudRateCfg( UINT32 baudrate );              /* 串口波特率配置 */
44 void UART0_ByteTrigCfg( UARTByteTRIGTypeDef b );        /* 串口字节触发中断配置 */
45 void UART0_INTCfg( UINT8 s,  UINT8 i );                 /* 串口中断配置 */
46 void UART0_Reset( void );                               /* 串口软件复位 */
47 
48 #define UART0_CLR_RXFIFO()       (R8_UART0_FCR |= RB_FCR_RX_FIFO_CLR)          /* 清除当前接收FIFO */
49 #define UART0_CLR_TXFIFO()       (R8_UART0_FCR |= RB_FCR_TX_FIFO_CLR)          /* 清除当前发送FIFO */
50 
51 #define UART0_GetITFlag()       (R8_UART0_IIR&RB_IIR_INT_MASK)          /* 获取当前中断标志 */
52 // please refer to LINE error and status define
53 #define UART0_GetLinSTA()       (R8_UART0_LSR)          /* 获取当前通讯状态 */
54 
55 #define UART0_SendByte(b)       (R8_UART0_THR = b)      /* 串口单字节发送 */
56 void UART0_SendString( PUINT8 buf, UINT16 l );          /* 串口多字节发送 */
57 #define UART0_RecvByte()        ( R8_UART0_RBR )        /* 串口读取单字节 */
58 UINT16 UART0_RecvString( PUINT8 buf );                  /* 串口读取多字节 */
59 
60 
61 
62 /****************** UART1 */
63 void UART1_DefInit( void );                             /* 串口默认初始化配置 */
64 void UART1_BaudRateCfg( UINT32 baudrate );              /* 串口波特率配置 */
65 void UART1_ByteTrigCfg( UARTByteTRIGTypeDef b );        /* 串口字节触发中断配置 */
66 void UART1_INTCfg( UINT8 s,  UINT8 i );                 /* 串口中断配置 */
67 void UART1_Reset( void );                               /* 串口软件复位 */
68 
69 #define UART1_CLR_RXFIFO()       (R8_UART1_FCR |= RB_FCR_RX_FIFO_CLR)          /* 清除当前接收FIFO */
70 #define UART1_CLR_TXFIFO()       (R8_UART1_FCR |= RB_FCR_TX_FIFO_CLR)          /* 清除当前发送FIFO */
71 
72 #define UART1_GetITFlag()       (R8_UART1_IIR&RB_IIR_INT_MASK)          /* 获取当前中断标志 */
73 // please refer to LINE error and status define
74 #define UART1_GetLinSTA()       (R8_UART1_LSR)          /* 获取当前通讯状态 */
75 
76 #define UART1_SendByte(b)       (R8_UART1_THR = b)      /* 串口单字节发送 */
77 void UART1_SendString( PUINT8 buf, UINT16 l );          /* 串口多字节发送 */
78 #define UART1_RecvByte()        ( R8_UART1_RBR )        /* 串口读取单字节 */
79 UINT16 UART1_RecvString( PUINT8 buf );                  /* 串口读取多字节 */
80 
81 
82 
83 /****************** UART2 */
84 void UART2_DefInit( void );                             /* 串口默认初始化配置 */
85 void UART2_BaudRateCfg( UINT32 baudrate );              /* 串口波特率配置 */
86 void UART2_ByteTrigCfg( UARTByteTRIGTypeDef b );        /* 串口字节触发中断配置 */
87 void UART2_INTCfg( UINT8 s,  UINT8 i );                 /* 串口中断配置 */
88 void UART2_Reset( void );                               /* 串口软件复位 */
89 
90 #define UART2_CLR_RXFIFO()       (R8_UART2_FCR |= RB_FCR_RX_FIFO_CLR)          /* 清除当前接收FIFO */
91 #define UART2_CLR_TXFIFO()       (R8_UART2_FCR |= RB_FCR_TX_FIFO_CLR)          /* 清除当前发送FIFO */
92 
93 #define UART2_GetITFlag()       (R8_UART2_IIR&RB_IIR_INT_MASK)          /* 获取当前中断标志 */
94 // please refer to LINE error and status define
95 #define UART2_GetLinSTA()       (R8_UART2_LSR)          /* 获取当前通讯状态 */
96 
97 #define UART2_SendByte(b)       (R8_UART2_THR = b)      /* 串口单字节发送 */
98 void UART2_SendString( PUINT8 buf, UINT16 l );          /* 串口多字节发送 */
99 #define UART2_RecvByte()        ( R8_UART2_RBR )        /* 串口读取单字节 */
100 UINT16 UART2_RecvString( PUINT8 buf );                  /* 串口读取多字节 */
101 
102 
103 
104 
105 /****************** UART3 */
106 void UART3_DefInit( void );                             /* 串口默认初始化配置 */
107 void UART3_BaudRateCfg( UINT32 baudrate );              /* 串口波特率配置 */
108 void UART3_ByteTrigCfg( UARTByteTRIGTypeDef b );        /* 串口字节触发中断配置 */
109 void UART3_INTCfg( UINT8 s,  UINT8 i );                 /* 串口中断配置 */
110 void UART3_Reset( void );                               /* 串口软件复位 */
111 
112 #define UART3_CLR_RXFIFO()       (R8_UART3_FCR |= RB_FCR_RX_FIFO_CLR)          /* 清除当前接收FIFO */
113 #define UART3_CLR_TXFIFO()       (R8_UART3_FCR |= RB_FCR_TX_FIFO_CLR)          /* 清除当前发送FIFO */
114 
115 #define UART3_GetITFlag()       (R8_UART3_IIR&RB_IIR_INT_MASK)          /* 获取当前中断标志 */
116 // please refer to LINE error and status define
117 #define UART3_GetLinSTA()       (R8_UART3_LSR)          /* 获取当前通讯状态 */
118 
119 #define UART3_SendByte(b)       (R8_UART3_THR = b)      /* 串口单字节发送 */
120 void UART3_SendString( PUINT8 buf, UINT16 l );          /* 串口多字节发送 */
121 #define UART3_RecvByte()        ( R8_UART3_RBR )        /* 串口读取单字节 */
122 UINT16 UART3_RecvString( PUINT8 buf );                  /* 串口读取多字节 */
123 
124 
125 
126 #ifdef __cplusplus
127 }
128 #endif
129 
130 #endif  // __CH57x_UART_H__
131 
132