summaryrefslogtreecommitdiff
path: root/bsp/Vango/v85xx/libraries/VangoV85xx_standard_peripheral/Include/lib_clk.h
blob: 5c0c2d4753ab5f993a89619ae0cbea913c26302d (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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
/**
  ******************************************************************************
  * @file    lib_clk.c 
  * @author  Application Team
  * @version V4.4.0
  * @date    2018-09-27
  * @brief   Clock library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#ifndef __LIB_CLK_H
#define __LIB_CLK_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "target.h"
   
/* PLLL Configure */
typedef struct
{
  uint32_t Source;
  uint32_t State;
  uint32_t Frequency;
} PLLL_ConfTypeDef;

/* PLLH Configure */
typedef struct
{
  uint32_t Source;
  uint32_t State;
  uint32_t Frequency;
} PLLH_ConfTypeDef;

/* RCH Configure */
typedef struct
{
  uint32_t State;
} RCH_ConfTypeDef;

/* XTALH Configure */
typedef struct
{
  uint32_t State;
} XTALH_ConfTypeDef;

/* RTCCLK Configure */
typedef struct
{
  uint32_t Source;
  uint32_t Divider;
} RTCCLK_ConfTypeDef;

/* HCLK Configure */
typedef struct
{
  uint32_t Divider;   /* 1 ~ 256 */
} HCLK_ConfTypeDef;

/* PCLK Configure */
typedef struct
{
  uint32_t Divider;   /* 1 ~ 256 */
} PCLK_ConfTypeDef;

/* Clock Configure */
typedef struct 
{
  uint32_t            ClockType;       /* The clock to be configured */ 
  
  uint32_t            AHBSource;
  
  PLLL_ConfTypeDef    PLLL;
  
  PLLH_ConfTypeDef    PLLH;
  
  XTALH_ConfTypeDef   XTALH;
  
  RTCCLK_ConfTypeDef  RTCCLK;
  
  HCLK_ConfTypeDef    HCLK;  
  
  PCLK_ConfTypeDef    PCLK;         
  
} CLK_InitTypeDef;

/*****  ClockType *****/
#define CLK_TYPE_Msk      (0xFFUL)
#define CLK_TYPE_ALL       CLK_TYPE_Msk
#define CLK_TYPE_AHBSRC   (0x01UL)   /* AHB Clock source to configure */
#define CLK_TYPE_PLLL     (0x02UL)   /* PLLL to configure */
#define CLK_TYPE_PLLH     (0x04UL)   /* PLLH to configure */
#define CLK_TYPE_XTALH    (0x08UL)   /* XTALH to configure */
#define CLK_TYPE_RTCCLK   (0x20UL)   /* RTCCLK to configure */
#define CLK_TYPE_HCLK     (0x40UL)   /* AHB Clock to configure */
#define CLK_TYPE_PCLK     (0x80UL)   /* APB Clock to configure */

/*****  AHBSource *****/
#define CLK_AHBSEL_6_5MRC     MISC2_CLKSEL_CLKSEL_RCOH
#define CLK_AHBSEL_6_5MXTAL   MISC2_CLKSEL_CLKSEL_XOH
#define CLK_AHBSEL_HSPLL      MISC2_CLKSEL_CLKSEL_PLLH
#define CLK_AHBSEL_RTCCLK     MISC2_CLKSEL_CLKSEL_RTCCLK
#define CLK_AHBSEL_LSPLL      MISC2_CLKSEL_CLKSEL_PLLL

/*****  PLLL_ConfTypeDef PLLL *****/
/* PLLL.Source */
#define CLK_PLLLSRC_RCL       PMU_CONTROL_PLLL_SEL
#define CLK_PLLLSRC_XTALL    (0)
/* PLLL.State */
#define CLK_PLLL_ON           ANA_REG3_PLLLPDN 
#define CLK_PLLL_OFF         (0) 
/* PLLL.Frequency */
#define CLK_PLLL_26_2144MHz   ANA_REG9_PLLLSEL_26M
#define CLK_PLLL_13_1072MHz   ANA_REG9_PLLLSEL_13M
#define CLK_PLLL_6_5536MHz    ANA_REG9_PLLLSEL_6_5M
#define CLK_PLLL_3_2768MHz    ANA_REG9_PLLLSEL_3_2M
#define CLK_PLLL_1_6384MHz    ANA_REG9_PLLLSEL_1_6M
#define CLK_PLLL_0_8192MHz    ANA_REG9_PLLLSEL_800K
#define CLK_PLLL_0_4096MHz    ANA_REG9_PLLLSEL_400K
#define CLK_PLLL_0_2048MHz    ANA_REG9_PLLLSEL_200K

/*****  PLLH_ConfTypeDef PLLH *****/
/* PLLH.Source */
#define CLK_PLLHSRC_RCH      (0)
#define CLK_PLLHSRC_XTALH     PMU_CONTROL_PLLH_SEL
/* PLLH.State */
#define CLK_PLLH_ON           ANA_REG3_PLLHPDN 
#define CLK_PLLH_OFF         (0) 
/* PLLH.Frequency */
#define CLK_PLLH_13_1072MHz       ANA_REG9_PLLHSEL_X2
#define CLK_PLLH_16_384MHz        ANA_REG9_PLLHSEL_X2_5
#define CLK_PLLH_19_6608MHz       ANA_REG9_PLLHSEL_X3
#define CLK_PLLH_22_9376MHz       ANA_REG9_PLLHSEL_X3_5
#define CLK_PLLH_26_2144MHz       ANA_REG9_PLLHSEL_X4
#define CLK_PLLH_29_4912MHz       ANA_REG9_PLLHSEL_X4_5
#define CLK_PLLH_32_768MHz        ANA_REG9_PLLHSEL_X5
#define CLK_PLLH_36_0448MHz       ANA_REG9_PLLHSEL_X5_5
#define CLK_PLLH_39_3216MHz       ANA_REG9_PLLHSEL_X6
#define CLK_PLLH_42_5984MHz       ANA_REG9_PLLHSEL_X6_5
#define CLK_PLLH_45_8752MHz       ANA_REG9_PLLHSEL_X7
#define CLK_PLLH_49_152MHz        ANA_REG9_PLLHSEL_X7_5

/* XTALH_ConfTypeDef XTALH */
/* XTALH.State */
#define CLK_XTALH_ON         ANA_REG3_XOHPDN
#define CLK_XTALH_OFF       (0)

/* RTCCLK Configure */
/* RTCCLK.Source */
#define CLK_RTCCLKSRC_XTALL     (0)
#define CLK_RTCCLKSRC_RCL       (PMU_CONTROL_RTCLK_SEL)
/* RTCCLK.Divider */
#define CLK_RTCCLKDIV_1         (RTC_PSCA_PSCA_0)
#define CLK_RTCCLKDIV_4         (RTC_PSCA_PSCA_1)

//AHB Periphral
#define CLK_AHBPERIPHRAL_DMA        MISC2_HCLKEN_DMA
#define CLK_AHBPERIPHRAL_GPIO       MISC2_HCLKEN_GPIO
#define CLK_AHBPERIPHRAL_LCD        MISC2_HCLKEN_LCD
#define CLK_AHBPERIPHRAL_CRYPT      MISC2_HCLKEN_CRYPT    
#define CLK_AHBPERIPHRAL_ALL       (MISC2_HCLKEN_DMA \
                                   |MISC2_HCLKEN_GPIO \
                                   |MISC2_HCLKEN_LCD \
                                   |MISC2_HCLKEN_CRYPT)

//APB Periphral  
#define CLK_APBPERIPHRAL_DMA        MISC2_PCLKEN_DMA       
#define CLK_APBPERIPHRAL_I2C        MISC2_PCLKEN_I2C       
#define CLK_APBPERIPHRAL_SPI1       MISC2_PCLKEN_SPI1      
#define CLK_APBPERIPHRAL_UART0      MISC2_PCLKEN_UART0     
#define CLK_APBPERIPHRAL_UART1      MISC2_PCLKEN_UART1     
#define CLK_APBPERIPHRAL_UART2      MISC2_PCLKEN_UART2     
#define CLK_APBPERIPHRAL_UART3      MISC2_PCLKEN_UART3     
#define CLK_APBPERIPHRAL_UART4      MISC2_PCLKEN_UART4     
#define CLK_APBPERIPHRAL_UART5      MISC2_PCLKEN_UART5     
#define CLK_APBPERIPHRAL_ISO78160   MISC2_PCLKEN_ISO78160     
#define CLK_APBPERIPHRAL_ISO78161   MISC2_PCLKEN_ISO78161     
#define CLK_APBPERIPHRAL_TIMER      MISC2_PCLKEN_TIMER     
#define CLK_APBPERIPHRAL_MISC       MISC2_PCLKEN_MISC      
#define CLK_APBPERIPHRAL_MISC2      MISC2_PCLKEN_MISC2 
#define CLK_APBPERIPHRAL_PMU        MISC2_PCLKEN_PMU       
#define CLK_APBPERIPHRAL_RTC        MISC2_PCLKEN_RTC       
#define CLK_APBPERIPHRAL_ANA        MISC2_PCLKEN_ANA       
#define CLK_APBPERIPHRAL_U32K0      MISC2_PCLKEN_U32K0     
#define CLK_APBPERIPHRAL_U32K1      MISC2_PCLKEN_U32K1 
#define CLK_APBPERIPHRAL_SPI2       MISC2_PCLKEN_SPI2 
#define CLK_APBPERIPHRAL_ALL       (MISC2_PCLKEN_DMA \
                                   |MISC2_PCLKEN_I2C \
                                   |MISC2_PCLKEN_SPI1 \
                                   |MISC2_PCLKEN_UART0 \
                                   |MISC2_PCLKEN_UART1 \
                                   |MISC2_PCLKEN_UART2 \
                                   |MISC2_PCLKEN_UART3 \
                                   |MISC2_PCLKEN_UART4 \
                                   |MISC2_PCLKEN_UART5 \
                                   |MISC2_PCLKEN_ISO78160 \
                                   |MISC2_PCLKEN_ISO78161 \
                                   |MISC2_PCLKEN_TIMER \
                                   |MISC2_PCLKEN_MISC \
                                   |MISC2_PCLKEN_MISC2 \
                                   |MISC2_PCLKEN_PMU \
                                   |MISC2_PCLKEN_RTC \
                                   |MISC2_PCLKEN_ANA \
                                   |MISC2_PCLKEN_U32K0 \
                                   |MISC2_PCLKEN_U32K1 \
                                   |MISC2_PCLKEN_SPI2)

/***** PLLStatus (CLK_GetPLLLockStatus) *****/
#define CLK_STATUS_LOCKL      ANA_COMPOUT_LOCKL
#define CLK_STATUS_LOCKH      ANA_COMPOUT_LOCKH


/* Private macros ------------------------------------------------------------*/
#define IS_CLK_TYPE(__TYPE__)   ((((__TYPE__) & CLK_TYPE_Msk) != 0UL) &&\
                                 (((__TYPE__) & ~CLK_TYPE_Msk) == 0UL))

#define IS_CLK_AHBSRC(__AHBSRC__)  (((__AHBSRC__) == CLK_AHBSEL_6_5MRC)   ||\
                                    ((__AHBSRC__) == CLK_AHBSEL_6_5MXTAL) ||\
                                    ((__AHBSRC__) == CLK_AHBSEL_HSPLL)    ||\
                                    ((__AHBSRC__) == CLK_AHBSEL_RTCCLK)   ||\
                                    ((__AHBSRC__) == CLK_AHBSEL_LSPLL))

#define IS_CLK_PLLLSRC(__PLLLSRC__)  (((__PLLLSRC__) == CLK_PLLLSRC_RCL) ||\
                                      ((__PLLLSRC__) == CLK_PLLLSRC_XTALL))

#define IS_CLK_PLLLSTA(__PLLLSTA__)  (((__PLLLSTA__) == CLK_PLLL_ON) ||\
                                      ((__PLLLSTA__) == CLK_PLLL_OFF))

#define IS_CLK_PLLLFRQ(__PLLLFRQ__)  (((__PLLLFRQ__) == CLK_PLLL_26_2144MHz) ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_13_1072MHz) ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_6_5536MHz)  ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_3_2768MHz)  ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_1_6384MHz)  ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_0_8192MHz)  ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_0_4096MHz)  ||\
                                      ((__PLLLFRQ__) == CLK_PLLL_0_2048MHz))

#define IS_CLK_PLLHSRC(__PLLHSRC__)  (((__PLLHSRC__) == CLK_PLLHSRC_RCH) ||\
                                      ((__PLLHSRC__) == CLK_PLLHSRC_XTALH))

#define IS_CLK_PLLHSTA(__PLLHSTA__)  (((__PLLHSTA__) == CLK_PLLH_ON) ||\
                                      ((__PLLHSTA__) == CLK_PLLH_OFF))

#define IS_CLK_PLLHFRQ(__PLLHSRC__)  (((__PLLHSRC__) == CLK_PLLH_13_1072MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_16_384MHz)  ||\
                                      ((__PLLHSRC__) == CLK_PLLH_19_6608MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_22_9376MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_26_2144MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_29_4912MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_32_768MHz)  ||\
                                      ((__PLLHSRC__) == CLK_PLLH_36_0448MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_39_3216MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_42_5984MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_45_8752MHz) ||\
                                      ((__PLLHSRC__) == CLK_PLLH_49_152MHz))

#define IS_CLK_XTALHSTA(__XTALHSTA__)  (((__XTALHSTA__) == CLK_XTALH_ON) ||\
                                        ((__XTALHSTA__) == CLK_XTALH_OFF))

#define IS_CLK_RTCSRC(__RTCSRC__)  (((__RTCSRC__) == CLK_RTCCLKSRC_XTALL) ||\
                                    ((__RTCSRC__) == CLK_RTCCLKSRC_RCL))

#define IS_CLK_RTCDIV(__RTCDIV__)  (((__RTCDIV__) == CLK_RTCCLKDIV_1) ||\
                                    ((__RTCDIV__) == CLK_RTCCLKDIV_4))

#define IS_CLK_HCLKDIV(__HCLKDIV__)  (((__HCLKDIV__) > 0UL) &&\
                                      ((__HCLKDIV__) < 257UL))

#define IS_CLK_PCLKDIV(__PCLKDIV__)  (((__PCLKDIV__) > 0UL) &&\
                                      ((__PCLKDIV__) < 257UL))

#define IS_CLK_AHBPERIPHRAL(__AHBPERIPHRAL__)  ((((__AHBPERIPHRAL__) & CLK_AHBPERIPHRAL_ALL) != 0UL) &&\
                                                (((__AHBPERIPHRAL__) & ~CLK_AHBPERIPHRAL_ALL) == 0UL))

#define IS_CLK_APBPERIPHRAL(__APBPERIPHRAL__)  ((((__APBPERIPHRAL__) & CLK_APBPERIPHRAL_ALL) != 0UL) &&\
                                                (((__APBPERIPHRAL__) & ~CLK_APBPERIPHRAL_ALL) == 0UL))

#define IS_CLK_PLLLOCK(__PLLLOCK__)  (((__PLLLOCK__) == ANA_COMPOUT_LOCKL) ||\
                                      ((__PLLLOCK__) == ANA_COMPOUT_LOCKH))
/* Exported Functions ------------------------------------------------------- */
/* CLK Exported Functions Group1: 
                                  Initialization and functions ---------------*/
void CLK_ClockConfig(CLK_InitTypeDef *CLK_ClkInitStruct);

/* CLK Exported Functions Group2: 
                                  Peripheral Control -------------------------*/
void CLK_AHBPeriphralCmd(uint32_t Periphral, uint32_t NewState);
void CLK_APBPeriphralCmd(uint32_t Periphral, uint32_t NewState);
/* CLK Exported Functions Group3: 
                                  Get clock/configuration information --------*/
uint32_t CLK_GetHCLKFreq(void);
uint32_t CLK_GetPCLKFreq(void);
void CLK_GetClockConfig(CLK_InitTypeDef *CLK_ClkInitStruct);
uint8_t CLK_GetXTALHStatus(void);
uint8_t CLK_GetXTALLStatus(void);
uint8_t CLK_GetPLLLockStatus(uint32_t PLLStatus);

#ifdef __cplusplus
}
#endif
     
#endif /* __LIB_CLK_H */

/*********************************** END OF FILE ******************************/