HWA
Bare metal programming with style
rccb_1.h
Go to the documentation of this file.
1 
2 /* This file is part of the HWA project.
3  * Copyright (c) 2021 Christophe Duparquet.
4  * All rights reserved. Read LICENSE.TXT for details.
5  */
6 
12 #define hw_class__rccb
13 
14 #include "hsia_1.h"
15 #include "hsea_1.h"
16 #include "pllb_1.h"
17 #include "ahba_1.h"
18 
19 #define hw_hsi _hsia, 0
20 #define hw_hse _hsea, 0
21 #define hw_pll _pllb, 0
22 
23 #define hw_class__apba
24 
25 #define hw_apb1 _apba, 0
26 #define hw_apb2 _apba, 0
27 
59 /* Hardware registers Reset value
60  */
61 #define hw_rcc_cr _r32, 0x00, 0x050D00F9, 0 // 0x0000 XX81
62 #define hw_rcc_pllcfgr _r32, 0x04, 0x0F437FFF, 0 // 0x2400 3010
63 #define hw_rcc_cfgr _r32, 0x08, 0xFFFFFCF3, 0 // 0x0000 0000
64 #define hw_rcc_cir _r32, 0x0C, 0x00BF3F00, 0x00BF0000 // 0x0000 0000
65 //#define hw_rcc_ahb1rstr _r32, 0x10,
66 //#define hw_rcc_ahb2rstr _r32, 0x14,
67 
68 //#define hw_rcc_apb1rstr _r32, 0x20,
69 //#define hw_rcc_apb2rstr _r32, 0x24,
70 
71 #define hw_rcc_ahb1enr _r32, 0x30, 0x0060109F, 0 // 0x0000 0000
72 #define hw_rcc_ahb2enr _r32, 0x34, 0x00000080, 0 // 0x0000 0000
73 
74 #define hw_rcc_apb1enr _r32, 0x40, 0x10E2C80F, 0 // 0x0000 0000
75 #define hw_rcc_apb2enr _r32, 0x44, 0x00177931, 0 // 0x0000 0000
76 
77 /* Logical registers are implemented as object registers since there is only one
78  * RCC in the device and HW_X() will find them faster this way.
79  */
80 #define hw_i2s_pll_rdy _xb1, rcc, cr, 1, 27
81 #define hw_i2s_pll_on _xb1, rcc, cr, 1, 26
82 
83 #define hw_pll_rdy _xb1, rcc, cr, 1, 25
84 #define hw_pll_on _xb1, rcc, cr, 1, 24
85 
86 #define hw_rcc_csson _ob1, cr, 1, 19
87 #define hw_css_on _xb1, rcc, cr, 1, 19
88 
89 #define hw_hse_byp _xb1, rcc, cr, 1, 18
90 #define hw_hse_rdy _xb1, rcc, cr, 1, 17
91 #define hw_hse_on _xb1, rcc, cr, 1, 16
92 #define hw_hse_cken _xb1, rcc, cr, 1, 16 /* Convenient */
93 
94 #define hw_hsi_cal _xb1, rcc, cr, 8, 8
95 #define hw_hsi_trim _xb1, rcc, cr, 5, 3
96 #define hw_hsi_rdy _xb1, rcc, cr, 1, 1
97 #define hw_hsi_on _xb1, rcc, cr, 1, 0
98 #define hw_hsi_cken _xb1, rcc, cr, 1, 0 /* Convenient */
99 
100 #define hw_pll_q _xb1, rcc, pllcfgr, 4, 24
101 #define hw_pll_src _xb1, rcc, pllcfgr, 1, 22
102 #define hw_pll_xtpresrc _xb1, rcc, pllcfgr, 1, 22 /* Convenient */
103 #define hw_pll_p _xb1, rcc, pllcfgr, 2, 16
104 #define hw_pll_n _xb1, rcc, pllcfgr, 9, 6
105 #define hw_pll_m _xb1, rcc, pllcfgr, 6, 0
106 
107 #define hw_rcc_mco2 _ob1, cfgr, 2, 30
108 #define hw_rcc_mco2pre _ob1, cfgr, 3, 27
109 #define hw_rcc_mco1pre _ob1, cfgr, 3, 24
110 
111 #define hw_i2s_scr _xb1, rcc, cfgr, 1, 23
112 
113 #define hw_rcc_mco1 _xb1, rcc, cfgr, 2, 21
114 
115 #define hw_rtc_pre _xb1, rcc, cfgr, 5, 16
116 
117 #define hw_rcc_ppre2 _ob1, cfgr, 3, 13
118 #define hw_apb2_psc _xb1, rcc, cfgr, 3, 13
119 
120 #define hw_rcc_ppre1 _ob1, cfgr, 3, 10
121 #define hw_apb1_psc _xb1, rcc, cfgr, 3, 10
122 
123 //#define hw_rcc_hpre _ob1, cfgr, 4, 4
124 #define hw_ahb_pre _xb1, rcc, cfgr, 4, 4
125 
126 #define hw_rcc_sws _ob1, cfgr, 2, 2
127 #define hw_rcc_sw _ob1, cfgr, 2, 0
128 
129 #define hw_css_c _xb1, rcc, cir, 1, 23
130 #define hw_i2s_pll_rdyc _xb1, rcc, cir, 1, 21
131 #define hw_pll_rdyc _xb1, rcc, cir, 1, 20
132 #define hw_hse_rdyc _xb1, rcc, cir, 1, 19
133 #define hw_hsi_rdyc _xb1, rcc, cir, 1, 18
134 #define hw_lse_rdyc _xb1, rcc, cir, 1, 17
135 #define hw_lsi_rdyc _xb1, rcc, cir, 1, 16
136 #define hw_i2s_pll_rdyie _xb1, rcc, cir, 1, 13
137 #define hw_pll_rdyie _xb1, rcc, cir, 1, 12
138 #define hw_hse_rdyie _xb1, rcc, cir, 1, 11
139 #define hw_hsi_rdyie _xb1, rcc, cir, 1, 10
140 #define hw_lse_rdyie _xb1, rcc, cir, 1, 9
141 #define hw_lsi_rdyie _xb1, rcc, cir, 1, 8
142 #define hw_css_f _xb1, rcc, cir, 1, 7
143 #define hw_i2s_pll_rdyf _xb1, rcc, cir, 1, 5
144 #define hw_pll_rdyf _xb1, rcc, cir, 1, 4
145 #define hw_hse_rdyf _xb1, rcc, cir, 1, 3
146 #define hw_hsi_rdyf _xb1, rcc, cir, 1, 2
147 #define hw_lse_rdyf _xb1, rcc, cir, 1, 1
148 #define hw_lsi_rdyf _xb1, rcc, cir, 1, 0
149 
150 #define hw_dma2_en _xb1, rcc, ahb1enr, 1, 22
151 #define hw_dma1_en _xb1, rcc, ahb1enr, 1, 21
152 #define hw_crc_en _xb1, rcc, ahb1enr, 1, 12
153 #define hw_gpioh_en _xb1, rcc, ahb1enr, 1, 7
154 #define hw_gpioe_en _xb1, rcc, ahb1enr, 1, 4
155 #define hw_gpiod_en _xb1, rcc, ahb1enr, 1, 3
156 #define hw_gpioc_en _xb1, rcc, ahb1enr, 1, 2
157 #define hw_gpiov_en _xb1, rcc, ahb1enr, 1, 1
158 #define hw_gpioa_en _xb1, rcc, ahb1enr, 1, 0
159 
160 #define hw_porth_cken _xb1, rcc, ahb1enr, 1, 7
161 #define hw_porte_cken _xb1, rcc, ahb1enr, 1, 4
162 #define hw_portd_cken _xb1, rcc, ahb1enr, 1, 3
163 #define hw_portc_cken _xb1, rcc, ahb1enr, 1, 2
164 #define hw_portv_cken _xb1, rcc, ahb1enr, 1, 1
165 #define hw_porta_cken _xb1, rcc, ahb1enr, 1, 0
166 
167 #define hw_usart2_en _xb1, rcc, apb1enr, 1, 17
168 #define hw_usart2_cken _xb1, rcc, apb1enr, 1, 17 /* convenient */
169 
170 #define hw_counter5_cken _xb1, rcc, apb1enr, 1, 3 /* convenient */
171 #define hw_counter4_cken _xb1, rcc, apb1enr, 1, 2 /* convenient */
172 #define hw_counter3_cken _xb1, rcc, apb1enr, 1, 1 /* convenient */
173 #define hw_counter2_cken _xb1, rcc, apb1enr, 1, 0 /* convenient */
174 
175 #define hw_usart1_en _xb1, rcc, apb2enr, 1, 4
176 #define hw_usart1_cken _xb1, rcc, apb2enr, 1, 4 /* convenient */
177 #define hw_usart6_en _xb1, rcc, apb2enr, 1, 5
178 #define hw_usart6_cken _xb1, rcc, apb2enr, 1, 5 /* convenient */
179 
180 
181 #if !defined __ASSEMBLER__
182 
183 /* HWA context
184  */
185 typedef struct {
186  hwa_r32_t cr ;
187  hwa_r32_t pllcfgr ;
188  hwa_r32_t cfgr ;
189  hwa_r32_t cir ;
190  hwa_r32_t ahb1enr ;
191  hwa_r32_t ahb2enr ;
192  hwa_r32_t apb1enr ;
193  hwa_r32_t apb2enr ;
194 } hwa_rccb_t ;
195 
196 #endif
ahba_1.h
AHB.
hsia_1.h
HSI.
hsea_1.h
HSE.
pllb_1.h
PLL.