/********************************** (C) COPYRIGHT ******************************* * File Name : CH59x_uart.h * Author : WCH * Version : V1.2 * Date : 2021/11/17 * Description ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ #ifndef __CH59x_UART_H__ #define __CH59x_UART_H__ #ifdef __cplusplus extern "C" { #endif /** * @brief LINE error and status define */ #define STA_ERR_BREAK RB_LSR_BREAK_ERR // 数据间隔错误 #define STA_ERR_FRAME RB_LSR_FRAME_ERR // 数据帧错误 #define STA_ERR_PAR RB_LSR_PAR_ERR // 奇偶校验位出错 #define STA_ERR_FIFOOV RB_LSR_OVER_ERR // 接收数据溢出 #define STA_TXFIFO_EMP RB_LSR_TX_FIFO_EMP // 当前发送FIFO空,可以继续填充发送数据 #define STA_TXALL_EMP RB_LSR_TX_ALL_EMP // 当前所有发送数据都发送完成 #define STA_RECV_DATA RB_LSR_DATA_RDY // 当前有接收到数据 /** * @brief Configuration UART TrigByte num */ typedef enum { UART_1BYTE_TRIG = 0, // 1字节触发 UART_2BYTE_TRIG, // 2字节触发 UART_4BYTE_TRIG, // 4字节触发 UART_7BYTE_TRIG, // 7字节触发 } UARTByteTRIGTypeDef; /** * @brief 串口默认初始化配置 */ void UART0_DefInit(void); /** * @brief 串口波特率配置 * * @param baudrate - 波特率 */ void UART0_BaudRateCfg(uint32_t baudrate); /** * @brief 串口字节触发中断配置 * * @param b - 触发字节数 refer to UARTByteTRIGTypeDef */ void UART0_ByteTrigCfg(UARTByteTRIGTypeDef b); /** * @brief 串口中断配置 * * @param s - 中断控制状态,是否使能相应中断 * @param i - 中断类型 * RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持) * RB_IER_LINE_STAT - 接收线路状态中断 * RB_IER_THR_EMPTY - 发送保持寄存器空中断 * RB_IER_RECV_RDY - 接收数据中断 */ void UART0_INTCfg(FunctionalState s, uint8_t i); /** * @brief 串口软件复位 */ void UART0_Reset(void); /** * @brief 清除当前接收FIFO */ #define UART0_CLR_RXFIFO() (R8_UART0_FCR |= RB_FCR_RX_FIFO_CLR) /** * @brief 清除当前发送FIFO */ #define UART0_CLR_TXFIFO() (R8_UART0_FCR |= RB_FCR_TX_FIFO_CLR) /** * @brief 获取当前中断标志 * * @return 当前中断标志 */ #define UART0_GetITFlag() (R8_UART0_IIR & RB_IIR_INT_MASK) /** * @brief 获取当前通讯状态 * * @return refer to LINE error and status define */ #define UART0_GetLinSTA() (R8_UART0_LSR) /** * @brief 串口单字节发送 * * @param b 待发送的字节 */ #define UART0_SendByte(b) (R8_UART0_THR = b) /** * @brief 串口多字节发送 * * @param buf - 待发送的数据内容首地址 * @param l - 待发送的数据长度 */ void UART0_SendString(uint8_t *buf, uint16_t l); /** * @brief 串口读取单字节 * * @return 读取到的单字节 */ #define UART0_RecvByte() (R8_UART0_RBR) /** * @brief 串口读取多字节 * * @param buf - 读取数据存放缓存区首地址 * * @return 读取数据长度 */ uint16_t UART0_RecvString(uint8_t *buf); /** * @brief 串口默认初始化配置 */ void UART1_DefInit(void); /** * @brief 串口波特率配置 * * @param baudrate - 波特率 */ void UART1_BaudRateCfg(uint32_t baudrate); /** * @brief 串口字节触发中断配置 * * @param b - 触发字节数 refer to UARTByteTRIGTypeDef */ void UART1_ByteTrigCfg(UARTByteTRIGTypeDef b); /** * @brief 串口中断配置 * * @param s - 中断控制状态,是否使能相应中断 * @param i - 中断类型 * RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持) * RB_IER_LINE_STAT - 接收线路状态中断 * RB_IER_THR_EMPTY - 发送保持寄存器空中断 * RB_IER_RECV_RDY - 接收数据中断 */ void UART1_INTCfg(FunctionalState s, uint8_t i); /** * @brief 串口软件复位 */ void UART1_Reset(void); /** * @brief 清除当前接收FIFO */ #define UART1_CLR_RXFIFO() (R8_UART1_FCR |= RB_FCR_RX_FIFO_CLR) /** * @brief 清除当前发送FIFO */ #define UART1_CLR_TXFIFO() (R8_UART1_FCR |= RB_FCR_TX_FIFO_CLR) /** * @brief 获取当前中断标志 * * @return 当前中断标志 */ #define UART1_GetITFlag() (R8_UART1_IIR & RB_IIR_INT_MASK) /** * @brief 获取当前通讯状态 * * @return refer to LINE error and status define */ #define UART1_GetLinSTA() (R8_UART1_LSR) /** * @brief 串口单字节发送 * * @param b 待发送的字节 */ #define UART1_SendByte(b) (R8_UART1_THR = b) /** * @brief 串口多字节发送 * * @param buf - 待发送的数据内容首地址 * @param l - 待发送的数据长度 */ void UART1_SendString(uint8_t *buf, uint16_t l); /** * @brief 串口读取单字节 * * @return 读取到的单字节 */ #define UART1_RecvByte() (R8_UART1_RBR) /** * @brief 串口读取多字节 * * @param buf - 读取数据存放缓存区首地址 * * @return 读取数据长度 */ uint16_t UART1_RecvString(uint8_t *buf); /** * @brief 串口默认初始化配置 */ void UART2_DefInit(void); /** * @brief 串口波特率配置 * * @param baudrate - 波特率 */ void UART2_BaudRateCfg(uint32_t baudrate); /** * @brief 串口字节触发中断配置 * * @param b - 触发字节数 refer to UARTByteTRIGTypeDef */ void UART2_ByteTrigCfg(UARTByteTRIGTypeDef b); /** * @brief 串口中断配置 * * @param s - 中断控制状态,是否使能相应中断 * @param i - 中断类型 * RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持) * RB_IER_LINE_STAT - 接收线路状态中断 * RB_IER_THR_EMPTY - 发送保持寄存器空中断 * RB_IER_RECV_RDY - 接收数据中断 */ void UART2_INTCfg(FunctionalState s, uint8_t i); /** * @brief 串口软件复位 */ void UART2_Reset(void); /** * @brief 清除当前接收FIFO */ #define UART2_CLR_RXFIFO() (R8_UART2_FCR |= RB_FCR_RX_FIFO_CLR) /** * @brief 清除当前发送FIFO */ #define UART2_CLR_TXFIFO() (R8_UART2_FCR |= RB_FCR_TX_FIFO_CLR) /** * @brief 获取当前中断标志 * * @return 当前中断标志 */ #define UART2_GetITFlag() (R8_UART2_IIR & RB_IIR_INT_MASK) /** * @brief 获取当前通讯状态 * * @return refer to LINE error and status define */ #define UART2_GetLinSTA() (R8_UART2_LSR) /** * @brief 串口单字节发送 * * @param b 待发送的字节 */ #define UART2_SendByte(b) (R8_UART2_THR = b) /** * @brief 串口多字节发送 * * @param buf - 待发送的数据内容首地址 * @param l - 待发送的数据长度 */ void UART2_SendString(uint8_t *buf, uint16_t l); /** * @brief 串口读取单字节 * * @return 读取到的单字节 */ #define UART2_RecvByte() (R8_UART2_RBR) /** * @brief 串口读取多字节 * * @param buf - 读取数据存放缓存区首地址 * * @return 读取数据长度 */ uint16_t UART2_RecvString(uint8_t *buf); /** * @brief 串口默认初始化配置 */ void UART3_DefInit(void); /** * @brief 串口波特率配置 * * @param baudrate - 波特率 */ void UART3_BaudRateCfg(uint32_t baudrate); /** * @brief 串口字节触发中断配置 * * @param b - 触发字节数 refer to UARTByteTRIGTypeDef */ void UART3_ByteTrigCfg(UARTByteTRIGTypeDef b); /** * @brief 串口中断配置 * * @param s - 中断控制状态,是否使能相应中断 * @param i - 中断类型 * RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持) * RB_IER_LINE_STAT - 接收线路状态中断 * RB_IER_THR_EMPTY - 发送保持寄存器空中断 * RB_IER_RECV_RDY - 接收数据中断 */ void UART3_INTCfg(FunctionalState s, uint8_t i); /** * @brief 串口软件复位 */ void UART3_Reset(void); /** * @brief 清除当前接收FIFO */ #define UART3_CLR_RXFIFO() (R8_UART3_FCR |= RB_FCR_RX_FIFO_CLR) /** * @brief 清除当前发送FIFO */ #define UART3_CLR_TXFIFO() (R8_UART3_FCR |= RB_FCR_TX_FIFO_CLR) /** * @brief 获取当前中断标志 * * @return 当前中断标志 */ #define UART3_GetITFlag() (R8_UART3_IIR & RB_IIR_INT_MASK) /** * @brief 获取当前通讯状态 * * @return refer to LINE error and status define */ #define UART3_GetLinSTA() (R8_UART3_LSR) /** * @brief 串口单字节发送 * * @param b 待发送的字节 */ #define UART3_SendByte(b) (R8_UART3_THR = b) /** * @brief 串口多字节发送 * * @param buf - 待发送的数据内容首地址 * @param l - 待发送的数据长度 */ void UART3_SendString(uint8_t *buf, uint16_t l); /** * @brief 串口读取单字节 * * @return 读取到的单字节 */ #define UART3_RecvByte() (R8_UART3_RBR) /** * @brief 串口读取多字节 * * @param buf - 读取数据存放缓存区首地址 * * @return 读取数据长度 */ uint16_t UART3_RecvString(uint8_t *buf); #ifdef __cplusplus } #endif #endif // __CH59x_UART_H__