aboutsummaryrefslogtreecommitdiff
path: root/CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c
diff options
context:
space:
mode:
authorFran莽ois Cartegnie <281376+fcartegnie@users.noreply.github.com>2024-06-06 11:22:09 +0700
committerGitHub <noreply@github.com>2024-06-06 11:22:09 +0700
commitf6d84a1ead1a57574c45bb80b6fd450c5b784e09 (patch)
treeccfe2db3861197bc29eff52e53a814d909501863 /CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c
parentd641c0de85f6ccf73c8c99012f1a5c4e28af54dc (diff)
parent90cdb61063b408aa4d8ba0c1e3c36d804f69f61a (diff)
Merge pull request #10 from kienvo/led-scan
Add basic Charlieplexing scan
Diffstat (limited to 'CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c')
-rw-r--r--CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c151
1 files changed, 151 insertions, 0 deletions
diff --git a/CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c b/CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c
new file mode 100644
index 0000000..baceba9
--- /dev/null
+++ b/CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart2.c
@@ -0,0 +1,151 @@
+/********************************** (C) COPYRIGHT *******************************
+ * File Name : CH58x_uart2.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 "CH58x_common.h"
+
+/*********************************************************************
+ * @fn UART2_DefInit
+ *
+ * @brief 串口默认初始化配置
+ *
+ * @param none
+ *
+ * @return none
+ */
+void UART2_DefInit(void)
+{
+ UART2_BaudRateCfg(115200);
+ R8_UART2_FCR = (2 << 6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节
+ R8_UART2_LCR = RB_LCR_WORD_SZ;
+ R8_UART2_IER = RB_IER_TXD_EN;
+ R8_UART2_DIV = 1;
+}
+
+/*********************************************************************
+ * @fn UART2_BaudRateCfg
+ *
+ * @brief 串口波特率配置
+ *
+ * @param baudrate - 波特率
+ *
+ * @return none
+ */
+void UART2_BaudRateCfg(uint32_t baudrate)
+{
+ uint32_t x;
+
+ x = 10 * GetSysClock() / 8 / baudrate;
+ x = (x + 5) / 10;
+ R16_UART2_DL = (uint16_t)x;
+}
+
+/*********************************************************************
+ * @fn UART2_ByteTrigCfg
+ *
+ * @brief 串口字节触发中断配置
+ *
+ * @param b - 触发字节数 refer to UARTByteTRIGTypeDef
+ *
+ * @return none
+ */
+void UART2_ByteTrigCfg(UARTByteTRIGTypeDef b)
+{
+ R8_UART2_FCR = (R8_UART2_FCR & ~RB_FCR_FIFO_TRIG) | (b << 6);
+}
+
+/*********************************************************************
+ * @fn UART2_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 UART2_INTCfg(FunctionalState s, uint8_t i)
+{
+ if(s)
+ {
+ R8_UART2_IER |= i;
+ R8_UART2_MCR |= RB_MCR_INT_OE;
+ }
+ else
+ {
+ R8_UART2_IER &= ~i;
+ }
+}
+
+/*********************************************************************
+ * @fn UART2_Reset
+ *
+ * @brief 串口软件复位
+ *
+ * @param none
+ *
+ * @return none
+ */
+void UART2_Reset(void)
+{
+ R8_UART2_IER = RB_IER_RESET;
+}
+
+/*********************************************************************
+ * @fn UART2_SendString
+ *
+ * @brief 串口多字节发送
+ *
+ * @param buf - 待发送的数据内容首地址
+ * @param l - 待发送的数据长度
+ *
+ * @return none
+ */
+void UART2_SendString(uint8_t *buf, uint16_t l)
+{
+ uint16_t len = l;
+
+ while(len)
+ {
+ if(R8_UART2_TFC != UART_FIFO_SIZE)
+ {
+ R8_UART2_THR = *buf++;
+ len--;
+ }
+ }
+}
+
+/*********************************************************************
+ * @fn UART2_RecvString
+ *
+ * @brief 串口读取多字节
+ *
+ * @param buf - 读取数据存放缓存区首地址
+ *
+ * @return 读取数据长度
+ */
+uint16_t UART2_RecvString(uint8_t *buf)
+{
+ uint16_t len = 0;
+
+ while(R8_UART2_RFC)
+ {
+ *buf++ = R8_UART2_RBR;
+ len++;
+ }
+
+ return (len);
+}
+