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