From 7d7389cac55952fcb794d2632747a8adc1e119ee Mon Sep 17 00:00:00 2001 From: Dien-Nhung Nguyen-Phu Date: Wed, 15 May 2024 12:43:35 +0700 Subject: init blink project generated project from EVT --- .../StdPeriphDriver/inc/CH58x_clk.h | 290 +++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_clk.h (limited to 'CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_clk.h') diff --git a/CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_clk.h b/CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_clk.h new file mode 100644 index 0000000..ed1984d --- /dev/null +++ b/CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_clk.h @@ -0,0 +1,290 @@ +/********************************** (C) COPYRIGHT ******************************* + * File Name : CH57x_clk.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 __CH58x_CLK_H__ +#define __CH58x_CLK_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 系统主频定义 + */ +typedef enum +{ + CLK_SOURCE_LSI = 0x00, + CLK_SOURCE_LSE, + + CLK_SOURCE_HSE_16MHz = 0x22, + CLK_SOURCE_HSE_8MHz = 0x24, + CLK_SOURCE_HSE_6_4MHz = 0x25, + CLK_SOURCE_HSE_4MHz = 0x28, + CLK_SOURCE_HSE_2MHz = (0x20 | 16), + CLK_SOURCE_HSE_1MHz = (0x20 | 0), + + CLK_SOURCE_PLL_80MHz = 0x46, + CLK_SOURCE_PLL_60MHz = 0x48, + CLK_SOURCE_PLL_48MHz = (0x40 | 10), + CLK_SOURCE_PLL_40MHz = (0x40 | 12), + CLK_SOURCE_PLL_36_9MHz = (0x40 | 13), + CLK_SOURCE_PLL_32MHz = (0x40 | 15), + CLK_SOURCE_PLL_30MHz = (0x40 | 16), + CLK_SOURCE_PLL_24MHz = (0x40 | 20), + CLK_SOURCE_PLL_20MHz = (0x40 | 24), + CLK_SOURCE_PLL_15MHz = (0x40 | 0), +} SYS_CLKTypeDef; + +/** + * @brief 32K时钟选择 + */ +typedef enum +{ + Clk32K_LSI = 0, + Clk32K_LSE, + +} LClk32KTypeDef; + +/** + * @brief 32M晶振电流挡位 + */ +typedef enum +{ + HSE_RCur_75 = 0, + HSE_RCur_100, + HSE_RCur_125, + HSE_RCur_150 + +} HSECurrentTypeDef; + +/** + * @brief 32M晶振内部电容挡位 + */ +typedef enum +{ + HSECap_10p = 0, + HSECap_12p, + HSECap_14p, + HSECap_16p, + HSECap_18p, + HSECap_20p, + HSECap_22p, + HSECap_24p + +} HSECapTypeDef; + +/** + * @brief 32K晶振电流挡位 + */ +typedef enum +{ + LSE_RCur_70 = 0, + LSE_RCur_100, + LSE_RCur_140, + LSE_RCur_200 + +} LSECurrentTypeDef; + +/** + * @brief 32K晶振内部电容挡位 + */ +typedef enum +{ + LSECap_2p = 0, + LSECap_13p, + LSECap_14p, + LSECap_15p, + LSECap_16p, + LSECap_17p, + LSECap_18p, + LSECap_19p, + LSECap_20p, + LSECap_21p, + LSECap_22p, + LSECap_23p, + LSECap_24p, + LSECap_25p, + LSECap_26p, + LSECap_27p + +} LSECapTypeDef; + +#define MAX_DAY 0x00004000 +#define MAX_2_SEC 0x0000A8C0 +//#define MAX_SEC 0x545FFFFF + +#define BEGYEAR 2020 +#define IsLeapYear(yr) (!((yr) % 400) || (((yr) % 100) && !((yr) % 4))) +#define YearLength(yr) (IsLeapYear(yr) ? 366 : 365) +#define monthLength(lpyr, mon) (((mon) == 1) ? (28 + (lpyr)) : (((mon) > 6) ? (((mon) & 1) ? 31 : 30) : (((mon) & 1) ? 30 : 31))) + +/** + * @brief rtc timer mode period define + */ +typedef enum +{ + Period_0_125_S = 0, // 0.125s 周期 + Period_0_25_S, // 0.25s 周期 + Period_0_5_S, // 0.5s 周期 + Period_1_S, // 1s 周期 + Period_2_S, // 2s 周期 + Period_4_S, // 4s 周期 + Period_8_S, // 8s 周期 + Period_16_S, // 16s 周期 +} RTC_TMRCycTypeDef; + +/** + * @brief rtc interrupt event define + */ +typedef enum +{ + RTC_TRIG_EVENT = 0, // RTC 触发事件 + RTC_TMR_EVENT, // RTC 周期定时事件 + +} RTC_EVENTTypeDef; + +/** + * @brief rtc interrupt event define + */ +typedef enum +{ + RTC_TRIG_MODE = 0, // RTC 触发模式 + RTC_TMR_MODE, // RTC 周期定时模式 + +} RTC_MODETypeDef; + +typedef enum +{ + /* 校准精度越高,耗时越长 */ + Level_32 = 3, // 用时 1.2ms 1000ppm (32M 主频) 1100ppm (60M 主频) + Level_64, // 用时 2.2ms 800ppm (32M 主频) 1000ppm (60M 主频) + Level_128, // 用时 4.2ms 600ppm (32M 主频) 800ppm (60M 主频) + +} Cali_LevelTypeDef; + +/** + * @brief 32K 低频时钟来源 + * + * @param hc - 选择32K使用内部还是外部 + */ +void LClk32K_Select(LClk32KTypeDef hc); + +/** + * @brief HSE晶体 偏置电流配置 + * + * @param c - 75%,100%,125%,150% + */ +void HSECFG_Current(HSECurrentTypeDef c); + +/** + * @brief HSE晶体 负载电容配置 + * + * @param c - refer to HSECapTypeDef + */ +void HSECFG_Capacitance(HSECapTypeDef c); + +/** + * @brief LSE晶体 偏置电流配置 + * + * @param c - 70%,100%,140%,200% + */ +void LSECFG_Current(LSECurrentTypeDef c); + +/** + * @brief LSE晶体 负载电容配置 + * + * @param c - refer to LSECapTypeDef + */ +void LSECFG_Capacitance(LSECapTypeDef c); + +void Calibration_LSI(Cali_LevelTypeDef cali_Lv); /* 用主频校准内部32K时钟 */ + +/** + * @brief RTC时钟初始化当前时间 + * + * @param y - 配置年,MAX_Y = BEGYEAR + 44 + * @param mon - 配置月,MAX_MON = 12 + * @param d - 配置日,MAX_D = 31 + * @param h - 配置小时,MAX_H = 23 + * @param m - 配置分钟,MAX_M = 59 + * @param s - 配置秒,MAX_S = 59 + */ +void RTC_InitTime(uint16_t y, uint16_t mon, uint16_t d, uint16_t h, uint16_t m, uint16_t s); + +/** + * @brief 获取当前时间 + * + * @param py - 获取到的年,MAX_Y = BEGYEAR + 44 + * @param pmon - 获取到的月,MAX_MON = 12 + * @param pd - 获取到的日,MAX_D = 31 + * @param ph - 获取到的小时,MAX_H = 23 + * @param pm - 获取到的分钟,MAX_M = 59 + * @param ps - 获取到的秒,MAX_S = 59 + */ +void RTC_GetTime(uint16_t *py, uint16_t *pmon, uint16_t *pd, uint16_t *ph, uint16_t *pm, uint16_t *ps); + +/** + * @brief 基于LSE/LSI时钟,配置当前RTC 周期数 + * + * @param cyc - 配置周期计数初值,MAX_CYC = 0xA8BFFFFF = 2831155199 + */ +void RTC_SetCycle32k(uint32_t cyc); + +/** + * @brief 基于LSE/LSI时钟,获取当前RTC 周期数 + * + * @return 当前周期数,MAX_CYC = 0xA8BFFFFF = 2831155199 + */ +uint32_t RTC_GetCycle32k(void); + +/** + * @brief RTC定时模式配置(注意定时基准固定为32768Hz) + * + * @param t - refer to RTC_TMRCycTypeDef + */ +void RTC_TRIGFunCfg(uint32_t cyc); + +/** + * @brief RTC定时模式配置(注意定时基准固定为32768Hz) + * + * @param t - refer to RTC_TMRCycTypeDef + */ +void RTC_TMRFunCfg(RTC_TMRCycTypeDef t); + +/** + * @brief RTC 模式功能关闭 + * + * @param m - 需要关闭的当前模式 + */ +void RTC_ModeFunDisable(RTC_MODETypeDef m); + +/** + * @brief 获取RTC中断标志 + * + * @param f - refer to RTC_EVENTTypeDef + * + * @return 中断标志状态 + */ +uint8_t RTC_GetITFlag(RTC_EVENTTypeDef f); + +/** + * @brief 清除RTC中断标志 + * + * @param f - refer to RTC_EVENTTypeDef + */ +void RTC_ClearITFlag(RTC_EVENTTypeDef f); + +#ifdef __cplusplus +} +#endif + +#endif // __CH58x_CLK_H__ -- cgit v1.2.3