1 
2 
3 
4 #ifndef __CH57x_CLK_H__
5 #define __CH57x_CLK_H__
6 
7 #ifdef __cplusplus
8  extern "C" {
9 #endif
10 
11 #include "CH579SFR.h"
12 #include "core_cm0.h"
13 
14 typedef enum
15 {
16     CLK_SOURCE_LSI = 0,
17     CLK_SOURCE_LSE,
18     CLK_SOURCE_HSE_32MHz,
19     CLK_SOURCE_HSE_16MHz,
20     CLK_SOURCE_HSE_8MHz,
21     CLK_SOURCE_HSI_32MHz,               //上电默认情况
22     CLK_SOURCE_HSI_16MHz,
23     CLK_SOURCE_HSI_8MHz,
24     CLK_SOURCE_PLL_40MHz,
25     CLK_SOURCE_PLL_32MHz,
26     CLK_SOURCE_PLL_24MHz,
27     CLK_SOURCE_PLL_20MHz,
28     CLK_SOURCE_PLL_16MHz,
29 
30 }SYS_CLKTypeDef;
31 
32 
33 typedef enum
34 {
35     Clk32M_HSI = 0,
36     Clk32M_HSE,
37 
38 }HClk32MTypeDef;
39 
40 typedef enum
41 {
42     Clk32K_LSI = 0,
43     Clk32K_LSE,
44 
45 }LClk32KTypeDef;
46 
47 typedef enum
48 {
49     HSE_RCur_75 = 0,
50     HSE_RCur_100,
51     HSE_RCur_125,
52     HSE_RCur_150
53 
54 }HSECurrentTypeDef;
55 
56 typedef enum
57 {
58     HSECap_10p = 0,
59     HSECap_12p,  HSECap_14p,  HSECap_16p,  HSECap_18p,
60     HSECap_20p,  HSECap_22p,  HSECap_24p
61 
62 }HSECapTypeDef;
63 
64 typedef enum
65 {
66     LSE_RCur_70 = 0,
67     LSE_RCur_100,
68     LSE_RCur_140,
69     LSE_RCur_200
70 
71 }LSECurrentTypeDef;
72 
73 typedef enum
74 {
75     LSECap_2p = 0,
76     LSECap_13p,  LSECap_14p,  LSECap_15p,  LSECap_16p,
77     LSECap_17p,  LSECap_18p,  LSECap_19p,  LSECap_20p,
78     LSECap_21p,  LSECap_22p,  LSECap_23p,  LSECap_24p,
79     LSECap_25p,  LSECap_26p,  LSECap_27p
80 
81 }LSECapTypeDef;
82 
83 #define  MAX_DAY        0x00004000
84 #define  MAX_2_SEC      0x0000A8C0
85 //#define    MAX_SEC        0x545FFFFF
86 
87 #define BEGYEAR                                                 2020
88 #define IsLeapYear(yr)                                  (!((yr) % 400) || (((yr) % 100) && !((yr) % 4)))
89 #define YearLength(yr)                                  (IsLeapYear(yr) ? 366 : 365)
90 #define monthLength(lpyr,mon)                       ((mon==1) ? (28+lpyr) : ((mon>6) ? ((mon&1)?31:30) : ((mon&1)?30:31)))
91 
92 /**
93   * @brief  rtc timer mode period define
94   */
95 typedef enum
96 {
97     Period_0_125_S = 0,         // 0.125s 周期
98     Period_0_25_S,              // 0.25s 周期
99     Period_0_5_S,               // 0.5s 周期
100     Period_1_S,                 // 1s 周期
101     Period_2_S,                 // 2s 周期
102     Period_4_S,                 // 4s 周期
103     Period_8_S,                 // 8s 周期
104     Period_16_S,                // 16s 周期
105 }RTC_TMRCycTypeDef;
106 
107 
108 /**
109   * @brief  rtc interrupt event define
110   */
111 typedef enum
112 {
113     RTC_TRIG_EVENT = 0,         // RTC 触发事件
114     RTC_TMR_EVENT,              // RTC 周期定时事件
115 
116 }RTC_EVENTTypeDef;
117 
118 /**
119   * @brief  rtc interrupt event define
120   */
121 typedef enum
122 {
123     RTC_TRIG_MODE = 0,          // RTC 触发模式
124     RTC_TMR_MODE,               // RTC 周期定时模式
125 
126 }RTC_MODETypeDef;
127 
128 
129 void SystemInit(void);                          /* 系统时钟初始化 */
130 void SetSysClock( SYS_CLKTypeDef sc);           /* 重设系统运行时钟 */
131 UINT32 GetSysClock( void );                     /* 获取当前系统时钟 */
132 void HClk32M_Select( HClk32MTypeDef hc);        /* 32M 高频时钟来源 */
133 void LClk32K_Select( LClk32KTypeDef hc);        /* 32K 低频时钟来源 */
134 
135 void HSECFG_Current( HSECurrentTypeDef c );     /* HSE晶体 偏置电流配置 */
136 void HSECFG_Capacitance( HSECapTypeDef c );     /* HSE晶体 负载电容配置 */
137 void LSECFG_Current( LSECurrentTypeDef c );     /* LSE晶体 偏置电流配置 */
138 void LSECFG_Capacitance( LSECapTypeDef c );     /* LSE晶体 负载电容配置 */
139 
140 UINT16 Calibration_LSI( void );             /* 外部32M时钟校准内部32K时钟 */
141 
142 
143 void RTC_InitTime( UINT16 y, UINT16 mon, UINT16 d, UINT16 h, UINT16 m, UINT16 s );          /* RTC时钟初始化当前时间 */
144 void RTC_GetTime( PUINT16 py, PUINT16 pmon, PUINT16 pd, PUINT16 ph, PUINT16 pm, PUINT16 ps );       /* 获取当前时间 */
145 
146 void RTC_SetCycle32k( UINT32 cyc );                         /* 基于LSE/LSI时钟,配置当前RTC 周期数 */
147 UINT32 RTC_GetCycle32k( void );                             /* 基于LSE/LSI时钟,获取当前RTC 周期数 */
148 
149 void RTC_TRIGFunCfg( UINT32 cyc );                          /* RTC触发模式配置间隔时间,基于LSE/LSI时钟,匹配周期数 */
150 void RTC_TMRFunCfg( RTC_TMRCycTypeDef t );                  /* RTC定时模式配置 */
151 void RTC_ModeFunDisable( RTC_MODETypeDef m );               /* RTC 模式功能关闭 */
152 
153 UINT8 RTC_GetITFlag( RTC_EVENTTypeDef f );                  /* 获取RTC中断标志 */
154 void RTC_ClearITFlag( RTC_EVENTTypeDef f );                 /* 清除RTC中断标志 */
155 
156 
157 
158 
159 #ifdef __cplusplus
160 }
161 #endif
162 
163 #endif  // __CH57x_CLK_H__
164 
165