blob: 3c55e67a4fa858f76738f7980a122ac09f49b197 (
plain) (
blame)
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
|
#ifndef H__RCC_
#define H__RCC_
#include "common.h"
#include <stdint.h>
#define RCC_BASE ((uint32_t)0x40021000)
typedef enum {
SYS_CLK_SW_MSI,
SYS_CLK_SW_HSI,
SYS_CLK_SW_HSE,
SYS_CLK_SW_PLL,
} sys_clk_sw_t;
typedef enum {
PLL_SRC_NONE,
PLL_SRC_MSI,
PLL_SRC_HSI,
PLL_SRC_HSE
} pll_src_t;
typedef struct {
/* Clock control register. Offset 0x00. */
union RCC_CR {
__IO uint32_t r; /* 32 bit register. */
/* Bit field for the c_r */
struct {
bits_t msion:1; /* Turn on teh MSI. */
bits_t msirdy:1; /* Is the MSI ready? */
bits_t msipllen:1; /* Enabled/disable the PLL part of MSI. */
bits_t msirgsel:1; /* MSI clock range selection. */
bits_t msirange:4; /* MSI range. */
bits_t hsion:1; /* Enable the HSI16 clock. */
bits_t hsikeron:1; /* Force the HSI16 ON even in stop modes. */
bits_t hsirdy:1; /* Is the hsi ready? */
bits_t hsiasfs:1; /* HSI automatic start from STOP. */
RESERVED(4);
bits_t hseon:1; /* Enable the HSE. */
bits_t hserdy:1; /* Is the HSE ready? */
bits_t hsebyp:1; /* Use an external HSE. */
bits_t csson:1; /* Clock security system enabled. */
RESERVED(4);
bits_t pllon:1; /* Enable the main PLL. */
bits_t pllrdy:1; /* Is the PLL ready? */
bits_t pllsai1on:1; /* Enable the SAI1 PLL. */
bits_t pllsai1rdy:1; /* Enable the SAI1 PLL. */
RESERVED(4);
} PACKED;
} __IO c;
/* Internal clock sources calibration register (RCC_ICSCR) Offset 0x04. */
union RCC_ICSCR {
__IO uint32_t r; /* 32 bit register. */
/* Bit field for icsc_r. */
struct {
bits_t msical:8;
bits_t msitrim:8;
bits_t hsical:8;
bits_t hsitrim:5;
RESERVED(3);
} PACKED;
} __IO icscr;
/* Clock configuration register. */
union RCC_CFGR {
__IO uint32_t r;
/* Bitfields for cfg_r. */
struct {
sys_clk_sw_t sw:2; /* System clock switch. @see sys_clk_sw_t enum. */
sys_clk_sw_t sws:2; /* System clock switch status. */
bits_t hpre:4; /* AHB prescaler. */
bits_t ppre:3; /* APB low-speed prescaller. */
RESERVED(1);
bits_t stopwuck:1; /* Wakeup from Stop and CSS backup clock selection. */
bits_t mcosel:4; /* Microcontroller clock output. */
bits_t mcopre:3; /* MCO prescaller. */
RESERVED(1);
} PACKED __IO;
} __IO cfg;
/* PLL Configuration register. Offset 0x0c */
union RCC_PLLCFGR {
__IO uint32_t r;
/* Bitfields for pllcfg_r */
struct {
pll_src_t pllsrc:2; /* PLL input source clock. */
RESERVED(2);
bits_t pllm:3; /* Divisions factor for the main PLL and audio PLL */
RESERVED(1);
bits_t plln:7; /* main PLL multiplication factor for VCO, must be
* on interval [8, 86] inclusive */
RESERVED(1);
bits_t pllpen:1; /* Main PLL PLLSAI1CLK output enable. */
bits_t pllp:1; /* Main division factor for PLLP.
* 0 = 7, 1 = 17 */
RESERVED(2);
bits_t pllqen:1; /* Main PLL PLL48M1CLK output enabled. */
bits_t pllq:2; /* PLLQ division factor. in 2^x. */
RESERVED(1);
bits_t pllren:1; /* PLL PLLCLK enabled. */
bits_t pllr:2; ; /* main pll divion factor. 2^x. */
bits_t pllpdiv:5; /* PLLP division factor. 0 to be handled by PLLP. */
} PACKED __IO;
} __IO pllcfg;
__IO uint32_t pllsai1cfg_r; /* PLLSAI1 configuration register. 0x10 */
__IO uint32_t reserved_1; /* Not used. offset 0x14. */
__IO uint32_t cie_r; /* Clock interrupt enable register. 0x18 */
__IO uint32_t cif_r; /* Clock interrupt flag regiseter. 0x1c */
__IO uint32_t cic_r; /* Clock interrupt clear register. 0x20 */
__IO uint32_t reserved_2; /* Not used. offset 0x24. */
__IO uint32_t ahb1rst_r; /* AHB Peripheral 1 reset register. 0x28 */
__IO uint32_t ahb2rst_r; /* AHB Peripheral 2 reset register. 0x2c */
__IO uint32_t ahb3rst_r; /* AHB Peripheral 3 reset register. 0x30 */
__IO uint32_t reserved_3; /* Not used. offset 0x34. */
__IO uint32_t apb1rst1_r; /* APB Peripheral reset register 1. 0x38 */
__IO uint32_t apb1rst2_r; /* APB Peripheral reset register 2. 0x3C */
__IO uint32_t apb2rst_r; /* APB Peripheral reset register. 0x40 */
__IO uint32_t reserved_4; /* Not used. offset 0x44. */
__IO uint32_t ahb1en_r; /* AHB1 Peripheral enable register. 0x48 */
__IO uint32_t ahb2en_r; /* AHB2 Peripheral enable register. 0x4C */
__IO uint32_t ahb3en_r; /* AHB3 Peripheral enable register. 0x50 */
__IO uint32_t reserved_5; /* Not used. offset 0x54. */
__IO uint32_t apb1en1_r; /* APB1 Peripheral enable register 1. 0x58 */
__IO uint32_t apb1en2_r; /* APB1 Peripheral enable register 2. 0x5C */
__IO uint32_t apb2en_r; /* APB2 Peripheral enable register. 0x60 */
__IO uint32_t reserved_6; /* Not used. offset 0x64. */
__IO uint32_t ahb1smen_r; /* 0x68 */
__IO uint32_t ahb2smen_r; /* 0x6c */
__IO uint32_t ahb3smen_r; /* 0x70 */
__IO uint32_t reserved_7;
__IO uint32_t apb1smen_r1; /* 0x78 */
__IO uint32_t apb1smen_r2; /* 0x7c */
__IO uint32_t apb2smen_r; /* 0x80 */
__IO uint32_t reserved_8;
__IO uint32_t ccip_r; /* 0x88 */
} PACKED rcc_t;
#define RCC (*(__IO rcc_t*)RCC_BASE)
#endif
|