HWA
Bare metal programming with style
rcca_1.h
Go to the documentation of this file.
1 
2 /* This file is part of the HWA project.
3  * Copyright (c) 2017 Christophe Duparquet.
4  * All rights reserved. Read LICENSE.TXT for details.
5  */
6 
12 #define hw_class__rcca
13 
14 #include "hsia_1.h"
15 #include "hsea_1.h"
16 #include "plla_1.h"
17 
18 #define hw_hsi _hsia, 0
19 #define hw_hse _hsea, 0
20 #define hw_pll _plla, 0
21 
22 #define hw_class__ahba
23 
24 #define hw_ahb _ahba, 0
25 
26 #define hw_class__apba
27 
28 #define hw_apb1 _apba, 0
29 #define hw_apb2 _apba, 0
30 
63 /* Hardware registers
64  */
65 #define hw_rcc_cr _r32, 0x00, 0x010D00F9, 0
66 #define hw_rcc_cfgr _r32, 0x04, 0x077FFFF3, 0
67 #define hw_rcc_cir _r32, 0x08, 0x00FFFFFF, 0
68 #define hw_rcc_apb2enr _r32, 0x18, 0x0038FFFD, 0
69 #define hw_rcc_apb1enr _r32, 0x1C, 0x3AFED3FF, 0
70 
71 /* Logical registers are implemented as object registers since there is only one
72  * RCC in the device and HW_X() will find them faster this way.
73  */
74 #define hw_rcc_csson _ob1, cr, 1, 19
75 
76 #define hw_pll_rdy _xb1, rcc, cr, 1, 25
77 #define hw_pll_on _xb1, rcc, cr, 1, 24
78 #define hw_pll_cken _xb1, rcc, cr, 1, 24 /* convenient */
79 
80 #define hw_hse_byp _xb1, rcc, cr, 1, 18
81 #define hw_hse_rdy _xb1, rcc, cr, 1, 17
82 #define hw_hse_on _xb1, rcc, cr, 1, 16
83 #define hw_hse_cken _xb1, rcc, cr, 1, 16 /* convenient */
84 
85 #define hw_hsi_cal _xb1, rcc, cr, 8, 8
86 #define hw_hsi_trim _xb1, rcc, cr, 5, 3
87 #define hw_hsi_rdy _xb1, rcc, cr, 1, 1
88 #define hw_hsi_on _xb1, rcc, cr, 1, 0
89 #define hw_hsi_cken _xb1, rcc, cr, 1, 0 /* convenient */
90 
91 #define hw_rcc_mco _ob1, cfgr, 3, 24
92 #define hw_rcc_usbpre _ob1, cfgr, 1, 22
93 #define hw_rcc_adcpre _ob1, cfgr, 2, 14
94 #define hw_rcc_ppre2 _ob1, cfgr, 3, 11
95 #define hw_rcc_apb2 _ob1, cfgr, 3, 11 /* convenient */
96 //#define hw_rcc_apb2prescaler _ob1, cfgr, 3, 11 /* convenient */
97 #define hw_rcc_ppre1 _ob1, cfgr, 3, 8
98 #define hw_rcc_apb1 _ob1, cfgr, 3, 8 /* convenient */
99 //#define hw_rcc_apb1prescaler _ob1, cfgr, 3, 8 /* convenient */
100 #define hw_rcc_hpre _ob1, cfgr, 4, 4
101 #define hw_rcc_sws _ob1, cfgr, 2, 2
102 #define hw_rcc_sw _ob1, cfgr, 2, 0
103 
104 #define hw_pll_mul _xb1, rcc, cfgr, 4, 18
105 #define hw_pll_xtpre _xb1, rcc, cfgr, 1, 17
106 #define hw_pll_src _xb1, rcc, cfgr, 1, 16
107 #define hw_pll_xtpresrc _xb1, rcc, cfgr, 2, 16 /* convenient */
108 
109 #define hw_hse_rdyc _xb1, rcc, cir, 1, 19
110 #define hw_hse_rdye _xb1, rcc, cir, 1, 11
111 #define hw_hse_rdyf _xb1, rcc, cir, 1, 3
112 
113 #define hw_hsi_rdyc _xb1, rcc, cir, 1, 18
114 #define hw_hsi_rdye _xb1, rcc, cir, 1, 10
115 #define hw_hsi_rdyf _xb1, rcc, cir, 1, 2
116 
117 #define hw_rcc_tim11en _ob1, apb2enr, 1, 21
118 #define hw_rcc_tim10en _ob1, apb2enr, 1, 20
119 #define hw_rcc_tim9en _ob1, apb2enr, 1, 19
120 #define hw_rcc_adc3en _ob1, apb2enr, 1, 15
121 #define hw_rcc_usart1en _ob1, apb2enr, 1, 14
122 #define hw_rcc_tim8en _ob1, apb2enr, 1, 13
123 #define hw_rcc_spi1en _ob1, apb2enr, 1, 12
124 #define hw_rcc_tim1en _ob1, apb2enr, 1, 11
125 #define hw_rcc_adc2en _ob1, apb2enr, 1, 10
126 #define hw_rcc_adc1en _ob1, apb2enr, 1, 9
127 #define hw_rcc_port6en _ob1, apb2enr, 1, 8
128 #define hw_rcc_port5en _ob1, apb2enr, 1, 7
129 #define hw_rcc_port4en _ob1, apb2enr, 1, 6
130 #define hw_rcc_port3en _ob1, apb2enr, 1, 5
131 #define hw_rcc_port2en _ob1, apb2enr, 1, 4
132 #define hw_rcc_port1en _ob1, apb2enr, 1, 3
133 #define hw_rcc_port0en _ob1, apb2enr, 1, 2
134 #define hw_rcc_afioen _ob1, apb2enr, 1, 0
135 
136 #define hw_porta_cken _xb1, rcc, apb2enr, 1, 2 /* convenient */
137 #define hw_portb_cken _xb1, rcc, apb2enr, 1, 3 /* convenient */
138 #define hw_portc_cken _xb1, rcc, apb2enr, 1, 4 /* convenient */
139 #define hw_portd_cken _xb1, rcc, apb2enr, 1, 5 /* convenient */
140 #define hw_porte_cken _xb1, rcc, apb2enr, 1, 6 /* convenient */
141 #define hw_porth_cken _xb1, rcc, apb2enr, 1, 8 /* convenient */
142 #define hw_afio_cken _xb1, rcc, apb2enr, 1, 0 /* convenient */
143 
144 #define hw_rcc_dacen _ob1, apb1enr, 1, 29
145 #define hw_rcc_pwren _ob1, apb1enr, 1, 28
146 #define hw_rcc_bkpen _ob1, apb1enr, 1, 27
147 #define hw_rcc_canen _ob1, apb1enr, 1, 25
148 #define hw_rcc_usben _ob1, apb1enr, 1, 23
149 #define hw_rcc_i2c2en _ob1, apb1enr, 1, 22
150 #define hw_rcc_i2c1en _ob1, apb1enr, 1, 21
151 #define hw_rcc_uart5en _ob1, apb1enr, 1, 20
152 #define hw_rcc_uart4en _ob1, apb1enr, 1, 19
153 #define hw_rcc_usart3en _ob1, apb1enr, 1, 18
154 #define hw_rcc_usart2en _ob1, apb1enr, 1, 17
155 #define hw_rcc_spi3en _ob1, apb1enr, 1, 15
156 #define hw_rcc_spi2en _ob1, apb1enr, 1, 14
157 #define hw_rcc_wwdgen _ob1, apb1enr, 1, 11
158 #define hw_rcc_tim14en _ob1, apb1enr, 1, 8
159 #define hw_rcc_tim13en _ob1, apb1enr, 1, 7
160 #define hw_rcc_tim12en _ob1, apb1enr, 1, 6
161 #define hw_rcc_tim7en _ob1, apb1enr, 1, 5
162 #define hw_rcc_tim6en _ob1, apb1enr, 1, 4
163 #define hw_rcc_tim5en _ob1, apb1enr, 1, 3
164 #define hw_rcc_tim4en _ob1, apb1enr, 1, 2
165 #define hw_rcc_tim3en _ob1, apb1enr, 1, 1
166 #define hw_rcc_tim2en _ob1, apb1enr, 1, 0
167 
168 /* HWA names
169  */
170 #define hw_rcc_dac _ob1, apb1enr, 1, 29
171 #define hw_rcc_power _ob1, apb1enr, 1, 28
172 #define hw_rcc_backup _ob1, apb1enr, 1, 27
173 #define hw_rcc_can _ob1, apb1enr, 1, 25
174 #define hw_rcc_usb _ob1, apb1enr, 1, 23
175 #define hw_rcc_i2c2 _ob1, apb1enr, 1, 22
176 #define hw_rcc_i2c1 _ob1, apb1enr, 1, 21
177 #define hw_rcc_uart5 _ob1, apb1enr, 1, 20
178 #define hw_rcc_uart4 _ob1, apb1enr, 1, 19
179 #define hw_rcc_usart3 _ob1, apb1enr, 1, 18
180 #define hw_rcc_usart2 _ob1, apb1enr, 1, 17
181 #define hw_rcc_spi3 _ob1, apb1enr, 1, 15
182 #define hw_rcc_spi2 _ob1, apb1enr, 1, 14
183 #define hw_rcc_windiwwdg _ob1, apb1enr, 1, 11
184 #define hw_rcc_counter14 _ob1, apb1enr, 1, 8
185 #define hw_rcc_counter13 _ob1, apb1enr, 1, 7
186 #define hw_rcc_counter12 _ob1, apb1enr, 1, 6
187 #define hw_rcc_counter7 _ob1, apb1enr, 1, 5
188 #define hw_rcc_counter6 _ob1, apb1enr, 1, 4
189 #define hw_rcc_counter5 _ob1, apb1enr, 1, 3
190 #define hw_rcc_counter4 _ob1, apb1enr, 1, 2
191 #define hw_rcc_counter3 _ob1, apb1enr, 1, 1
192 #define hw_rcc_counter2 _ob1, apb1enr, 1, 0
193 
194 #define hw_counter2_cken _xb1, rcc, apb1enr, 1, 0 /* convenient */
195 #define hw_counter3_cken _xb1, rcc, apb1enr, 1, 1 /* convenient */
196 #define hw_counter4_cken _xb1, rcc, apb1enr, 1, 2 /* convenient */
197 #define hw_counter5_cken _xb1, rcc, apb1enr, 1, 3 /* convenient */
198 
199 
200 /* Convenient objects
201  */
202 #define hw_usbprescaler _obj, 0
203 #define hw_adcprescaler _obj, 0
204 
205 
206 #if !defined __ASSEMBLER__
207 
208 /* HWA context
209  */
210 typedef struct {
211  hwa_r32_t cr ;
212  hwa_r32_t cfgr ;
213  hwa_r32_t apb2enr ;
214  hwa_r32_t apb1enr ;
215 } hwa_rcca_t ;
216 
217 #endif
hsia_1.h
HSI.
plla_1.h
PLL.
hsea_1.h
HSE.