diff options
| author | 1-rafael-1 <[email protected]> | 2025-05-12 21:42:03 +0200 |
|---|---|---|
| committer | 1-rafael-1 <[email protected]> | 2025-05-12 21:42:03 +0200 |
| commit | be1b679d48b5d781f888fb97c1fed7479235019b (patch) | |
| tree | e883df00afab5e1e19c92e7041f5911a43977c2e | |
| parent | 79e452922a6b467f2e8547a6b28698ed5f409705 (diff) | |
Refactor CoreVoltage enum, separate for rp2040 and rp235x
| -rw-r--r-- | embassy-rp/src/clocks.rs | 98 |
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))] |
| 162 | pub enum CoreVoltage { | 163 | pub 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))] | ||
| 200 | pub 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 | ||
