aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp
diff options
context:
space:
mode:
author1-rafael-1 <[email protected]>2025-05-12 21:42:03 +0200
committer1-rafael-1 <[email protected]>2025-05-12 21:42:03 +0200
commitbe1b679d48b5d781f888fb97c1fed7479235019b (patch)
treee883df00afab5e1e19c92e7041f5911a43977c2e /embassy-rp
parent79e452922a6b467f2e8547a6b28698ed5f409705 (diff)
Refactor CoreVoltage enum, separate for rp2040 and rp235x
Diffstat (limited to 'embassy-rp')
-rw-r--r--embassy-rp/src/clocks.rs98
1 files changed, 42 insertions, 56 deletions
diff --git a/embassy-rp/src/clocks.rs b/embassy-rp/src/clocks.rs
index 5872ef789..3975e7e79 100644
--- a/embassy-rp/src/clocks.rs
+++ b/embassy-rp/src/clocks.rs
@@ -156,93 +156,79 @@ pub enum PeriClkSrc {
156/// **Note**: For RP235x the maximum voltage is 1.30V, unless unlocked by setting unless the voltage limit 156/// **Note**: For RP235x the maximum voltage is 1.30V, unless unlocked by setting unless the voltage limit
157/// is disabled using the disable_voltage_limit field in the vreg_ctrl register. For lack of practical use at this 157/// is disabled using the disable_voltage_limit field in the vreg_ctrl register. For lack of practical use at this
158/// point in time, this is not implemented here. So the maximum voltage in this enum is 1.30V for now. 158/// point in time, this is not implemented here. So the maximum voltage in this enum is 1.30V for now.
159#[cfg(feature = "rp2040")]
159#[repr(u8)] 160#[repr(u8)]
160#[derive(Clone, Copy, Debug, PartialEq, Eq)] 161#[derive(Clone, Copy, Debug, PartialEq, Eq)]
161#[cfg_attr(feature = "defmt", derive(defmt::Format))] 162#[cfg_attr(feature = "defmt", derive(defmt::Format))]
162pub enum CoreVoltage { 163pub enum CoreVoltage {
163 // RP2040 voltage levels 164 /// 0.80V
164 #[cfg(feature = "rp2040")]
165 /// RP2040: 0.80V
166 V0_80 = 0b0000, 165 V0_80 = 0b0000,
167 #[cfg(feature = "rp2040")] 166 /// 0.85V
168 /// RP2040: 0.85V
169 V0_85 = 0b0110, 167 V0_85 = 0b0110,
170 #[cfg(feature = "rp2040")] 168 /// 0.90V
171 /// RP2040: 0.90V
172 V0_90 = 0b0111, 169 V0_90 = 0b0111,
173 #[cfg(feature = "rp2040")] 170 /// 0.95V
174 /// RP2040: 0.95V
175 V0_95 = 0b1000, 171 V0_95 = 0b1000,
176 #[cfg(feature = "rp2040")] 172 /// 1.00V
177 /// RP2040: 1.00V
178 V1_00 = 0b1001, 173 V1_00 = 0b1001,
179 #[cfg(feature = "rp2040")] 174 /// 1.05V
180 /// RP2040: 1.05V
181 V1_05 = 0b1010, 175 V1_05 = 0b1010,
182 #[cfg(feature = "rp2040")] 176 /// 1.10V - Default voltage level
183 /// RP2040: 1.10V - Default voltage level
184 V1_10 = 0b1011, 177 V1_10 = 0b1011,
185 #[cfg(feature = "rp2040")] 178 /// 1.15V - Required for overclocking to 133-200MHz
186 /// RP2040: 1.15V - Required for overclocking to 133-200MHz
187 V1_15 = 0b1100, 179 V1_15 = 0b1100,
188 #[cfg(feature = "rp2040")] 180 /// 1.20V
189 /// RP2040: 1.20V
190 V1_20 = 0b1101, 181 V1_20 = 0b1101,
191 #[cfg(feature = "rp2040")] 182 /// 1.25V
192 /// RP2040: 1.25V
193 V1_25 = 0b1110, 183 V1_25 = 0b1110,
194 #[cfg(feature = "rp2040")] 184 /// 1.30V
195 /// RP2040: 1.30V
196 V1_30 = 0b1111, 185 V1_30 = 0b1111,
186}
197 187
198 // RP235x voltage levels 188/// Core voltage regulator settings.
199 #[cfg(feature = "_rp235x")] 189///
200 /// RP235x: 0.55V 190/// The voltage regulator can be configured for different output voltages.
191/// Higher voltages allow for higher clock frequencies but increase power consumption and heat.
192///
193/// **Note**: For RP235x the maximum voltage is 1.30V, unless unlocked by setting unless the voltage limit
194/// is disabled using the disable_voltage_limit field in the vreg_ctrl register. For lack of practical use at this
195/// point in time, this is not implemented here. So the maximum voltage in this enum is 1.30V for now.
196#[cfg(feature = "_rp235x")]
197#[repr(u8)]
198#[derive(Clone, Copy, Debug, PartialEq, Eq)]
199#[cfg_attr(feature = "defmt", derive(defmt::Format))]
200pub enum CoreVoltage {
201 /// 0.55V
201 V0_55 = 0b00000, 202 V0_55 = 0b00000,
202 #[cfg(feature = "_rp235x")] 203 /// 0.60V
203 /// RP235x: 0.60V
204 V0_60 = 0b00001, 204 V0_60 = 0b00001,
205 #[cfg(feature = "_rp235x")] 205 /// 0.65V
206 /// RP235x: 0.65V
207 V0_65 = 0b00010, 206 V0_65 = 0b00010,
208 #[cfg(feature = "_rp235x")] 207 /// 0.70V
209 /// RP235x: 0.70V
210 V0_70 = 0b00011, 208 V0_70 = 0b00011,
211 #[cfg(feature = "_rp235x")] 209 /// 0.75V
212 /// RP235x: 0.75V
213 V0_75 = 0b00100, 210 V0_75 = 0b00100,
214 #[cfg(feature = "_rp235x")] 211 /// 0.80V
215 /// RP235x: 0.80V
216 V0_80 = 0b00101, 212 V0_80 = 0b00101,
217 #[cfg(feature = "_rp235x")] 213 /// 0.85V
218 /// RP235x: 0.85V
219 V0_85 = 0b00110, 214 V0_85 = 0b00110,
220 #[cfg(feature = "_rp235x")] 215 /// 0.90V
221 /// RP235x: 0.90V
222 V0_90 = 0b00111, 216 V0_90 = 0b00111,
223 #[cfg(feature = "_rp235x")] 217 /// 0.95V
224 /// RP235x: 0.95V
225 V0_95 = 0b01000, 218 V0_95 = 0b01000,
226 #[cfg(feature = "_rp235x")] 219 /// 1.00V
227 /// RP235x: 1.00V
228 V1_00 = 0b01001, 220 V1_00 = 0b01001,
229 #[cfg(feature = "_rp235x")] 221 /// 1.05V
230 /// RP235x: 1.05V
231 V1_05 = 0b01010, 222 V1_05 = 0b01010,
232 #[cfg(feature = "_rp235x")] 223 /// 1.10V - Default voltage level
233 /// RP235x: 1.10V - Default voltage level
234 V1_10 = 0b01011, 224 V1_10 = 0b01011,
235 #[cfg(feature = "_rp235x")] 225 /// 1.15V
236 /// RP235x: 1.15V
237 V1_15 = 0b01100, 226 V1_15 = 0b01100,
238 #[cfg(feature = "_rp235x")] 227 /// 1.20V
239 /// RP235x: 1.20V
240 V1_20 = 0b01101, 228 V1_20 = 0b01101,
241 #[cfg(feature = "_rp235x")] 229 /// 1.25V
242 /// RP235x: 1.25V
243 V1_25 = 0b01110, 230 V1_25 = 0b01110,
244 #[cfg(feature = "_rp235x")] 231 /// 1.30V
245 /// RP235x: 1.30V
246 V1_30 = 0b01111, 232 V1_30 = 0b01111,
247} 233}
248 234