summaryrefslogtreecommitdiff
path: root/bsp/wch/arm/ch579m/libraries/StdPeriphDriver/inc/CH57x_clk.h
blob: c506f7a001ae502533cd85370d28d23a91ff2887 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164



#ifndef __CH57x_CLK_H__
#define __CH57x_CLK_H__

#ifdef __cplusplus
 extern "C" {
#endif

#include "CH579SFR.h"
#include "core_cm0.h"

typedef enum
{
    CLK_SOURCE_LSI = 0,
    CLK_SOURCE_LSE,
    CLK_SOURCE_HSE_32MHz,
    CLK_SOURCE_HSE_16MHz,
    CLK_SOURCE_HSE_8MHz,
    CLK_SOURCE_HSI_32MHz,               //上电默认情况
    CLK_SOURCE_HSI_16MHz,
    CLK_SOURCE_HSI_8MHz,
    CLK_SOURCE_PLL_40MHz,
    CLK_SOURCE_PLL_32MHz,
    CLK_SOURCE_PLL_24MHz,
    CLK_SOURCE_PLL_20MHz,
    CLK_SOURCE_PLL_16MHz,

}SYS_CLKTypeDef;


typedef enum
{
    Clk32M_HSI = 0,
    Clk32M_HSE,

}HClk32MTypeDef;

typedef enum
{
    Clk32K_LSI = 0,
    Clk32K_LSE,

}LClk32KTypeDef;

typedef enum
{
    HSE_RCur_75 = 0,
    HSE_RCur_100,
    HSE_RCur_125,
    HSE_RCur_150

}HSECurrentTypeDef;

typedef enum
{
    HSECap_10p = 0,
    HSECap_12p,  HSECap_14p,  HSECap_16p,  HSECap_18p,
    HSECap_20p,  HSECap_22p,  HSECap_24p

}HSECapTypeDef;

typedef enum
{
    LSE_RCur_70 = 0,
    LSE_RCur_100,
    LSE_RCur_140,
    LSE_RCur_200

}LSECurrentTypeDef;

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;


void SystemInit(void);                          /* 系统时钟初始化 */
void SetSysClock( SYS_CLKTypeDef sc);           /* 重设系统运行时钟 */
UINT32 GetSysClock( void );                     /* 获取当前系统时钟 */
void HClk32M_Select( HClk32MTypeDef hc);        /* 32M 高频时钟来源 */
void LClk32K_Select( LClk32KTypeDef hc);        /* 32K 低频时钟来源 */

void HSECFG_Current( HSECurrentTypeDef c );     /* HSE晶体 偏置电流配置 */
void HSECFG_Capacitance( HSECapTypeDef c );     /* HSE晶体 负载电容配置 */
void LSECFG_Current( LSECurrentTypeDef c );     /* LSE晶体 偏置电流配置 */
void LSECFG_Capacitance( LSECapTypeDef c );     /* LSE晶体 负载电容配置 */

UINT16 Calibration_LSI( void );             /* 外部32M时钟校准内部32K时钟 */


void RTC_InitTime( UINT16 y, UINT16 mon, UINT16 d, UINT16 h, UINT16 m, UINT16 s );          /* RTC时钟初始化当前时间 */
void RTC_GetTime( PUINT16 py, PUINT16 pmon, PUINT16 pd, PUINT16 ph, PUINT16 pm, PUINT16 ps );       /* 获取当前时间 */

void RTC_SetCycle32k( UINT32 cyc );                         /* 基于LSE/LSI时钟,配置当前RTC 周期数 */
UINT32 RTC_GetCycle32k( void );                             /* 基于LSE/LSI时钟,获取当前RTC 周期数 */

void RTC_TRIGFunCfg( UINT32 cyc );                          /* RTC触发模式配置间隔时间,基于LSE/LSI时钟,匹配周期数 */
void RTC_TMRFunCfg( RTC_TMRCycTypeDef t );                  /* RTC定时模式配置 */
void RTC_ModeFunDisable( RTC_MODETypeDef m );               /* RTC 模式功能关闭 */

UINT8 RTC_GetITFlag( RTC_EVENTTypeDef f );                  /* 获取RTC中断标志 */
void RTC_ClearITFlag( RTC_EVENTTypeDef f );                 /* 清除RTC中断标志 */




#ifdef __cplusplus
}
#endif

#endif  // __CH57x_CLK_H__