151 lines
3.6 KiB
C
151 lines
3.6 KiB
C
/********************************** (C) COPYRIGHT *******************************
|
||
* File Name : CH59x_uart1.c
|
||
* 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.
|
||
*******************************************************************************/
|
||
|
||
#include "CH59x_common.h"
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_DefInit
|
||
*
|
||
* @brief 串口默认初始化配置
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*/
|
||
void UART1_DefInit(void)
|
||
{
|
||
UART1_BaudRateCfg(115200);
|
||
R8_UART1_FCR = (2 << 6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节
|
||
R8_UART1_LCR = RB_LCR_WORD_SZ;
|
||
R8_UART1_IER = RB_IER_TXD_EN;
|
||
R8_UART1_DIV = 1;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_BaudRateCfg
|
||
*
|
||
* @brief 串口波特率配置
|
||
*
|
||
* @param baudrate - 波特率
|
||
*
|
||
* @return none
|
||
*/
|
||
void UART1_BaudRateCfg(uint32_t baudrate)
|
||
{
|
||
uint32_t x;
|
||
|
||
x = 10 * GetSysClock() / 8 / baudrate;
|
||
x = (x + 5) / 10;
|
||
R16_UART1_DL = (uint16_t)x;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_ByteTrigCfg
|
||
*
|
||
* @brief 串口字节触发中断配置
|
||
*
|
||
* @param b - 触发字节数 refer to UARTByteTRIGTypeDef
|
||
*
|
||
* @return none
|
||
*/
|
||
void UART1_ByteTrigCfg(UARTByteTRIGTypeDef b)
|
||
{
|
||
R8_UART1_FCR = (R8_UART1_FCR & ~RB_FCR_FIFO_TRIG) | (b << 6);
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_INTCfg
|
||
*
|
||
* @brief 串口中断配置
|
||
*
|
||
* @param s - 中断控制状态,是否使能相应中断
|
||
* @param i - 中断类型
|
||
* RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持)
|
||
* RB_IER_LINE_STAT - 接收线路状态中断
|
||
* RB_IER_THR_EMPTY - 发送保持寄存器空中断
|
||
* RB_IER_RECV_RDY - 接收数据中断
|
||
*
|
||
* @return none
|
||
*/
|
||
void UART1_INTCfg(FunctionalState s, uint8_t i)
|
||
{
|
||
if(s)
|
||
{
|
||
R8_UART1_IER |= i;
|
||
R8_UART1_MCR |= RB_MCR_INT_OE;
|
||
}
|
||
else
|
||
{
|
||
R8_UART1_IER &= ~i;
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_Reset
|
||
*
|
||
* @brief 串口软件复位
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*/
|
||
void UART1_Reset(void)
|
||
{
|
||
R8_UART1_IER = RB_IER_RESET;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_SendString
|
||
*
|
||
* @brief 串口多字节发送
|
||
*
|
||
* @param buf - 待发送的数据内容首地址
|
||
* @param l - 待发送的数据长度
|
||
*
|
||
* @return none
|
||
*/
|
||
void UART1_SendString(uint8_t *buf, uint16_t l)
|
||
{
|
||
uint16_t len = l;
|
||
|
||
while(len)
|
||
{
|
||
if(R8_UART1_TFC != UART_FIFO_SIZE)
|
||
{
|
||
R8_UART1_THR = *buf++;
|
||
len--;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn UART1_RecvString
|
||
*
|
||
* @brief 串口读取多字节
|
||
*
|
||
* @param buf - 读取数据存放缓存区首地址
|
||
*
|
||
* @return 读取数据长度
|
||
*/
|
||
uint16_t UART1_RecvString(uint8_t *buf)
|
||
{
|
||
uint16_t len = 0;
|
||
|
||
while(R8_UART1_RFC)
|
||
{
|
||
*buf++ = R8_UART1_RBR;
|
||
len++;
|
||
}
|
||
|
||
return (len);
|
||
}
|