aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrant Miller <[email protected]>2022-10-26 02:28:39 -0500
committerGrant Miller <[email protected]>2022-10-26 17:07:58 -0500
commit2cfe2439c980129b2dc8170f35944f3c0505c230 (patch)
tree947b67d7a3216aa8ce6ac628bbec6400036d58a0
parent7b38b95e1036d2a62e1d0abfc41b064839497242 (diff)
Refactor: Impl `From` for `SampleTime` and `Resolution`
-rw-r--r--embassy-stm32/src/adc/f1.rs9
-rw-r--r--embassy-stm32/src/adc/mod.rs5
-rw-r--r--embassy-stm32/src/adc/resolution.rs10
-rw-r--r--embassy-stm32/src/adc/sample_time.rs8
-rw-r--r--embassy-stm32/src/adc/v2.rs11
-rw-r--r--embassy-stm32/src/adc/v3.rs15
-rw-r--r--embassy-stm32/src/adc/v4.rs11
7 files changed, 30 insertions, 39 deletions
diff --git a/embassy-stm32/src/adc/f1.rs b/embassy-stm32/src/adc/f1.rs
index 56d1a2f33..8a3b4be56 100644
--- a/embassy-stm32/src/adc/f1.rs
+++ b/embassy-stm32/src/adc/f1.rs
@@ -146,14 +146,11 @@ impl<'d, T: Instance> Adc<'d, T> {
146 } 146 }
147 147
148 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) { 148 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) {
149 let sample_time = sample_time.into();
149 if ch <= 9 { 150 if ch <= 9 {
150 T::regs() 151 T::regs().smpr2().modify(|reg| reg.set_smp(ch as _, sample_time));
151 .smpr2()
152 .modify(|reg| reg.set_smp(ch as _, sample_time.sample_time()));
153 } else { 152 } else {
154 T::regs() 153 T::regs().smpr1().modify(|reg| reg.set_smp((ch - 10) as _, sample_time));
155 .smpr1()
156 .modify(|reg| reg.set_smp((ch - 10) as _, sample_time.sample_time()));
157 } 154 }
158 } 155 }
159} 156}
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs
index 35d84f976..328470ef6 100644
--- a/embassy-stm32/src/adc/mod.rs
+++ b/embassy-stm32/src/adc/mod.rs
@@ -8,11 +8,10 @@
8#[cfg_attr(adc_v1, path = "v1.rs")] 8#[cfg_attr(adc_v1, path = "v1.rs")]
9mod _version; 9mod _version;
10 10
11#[cfg(not(adc_v1))]
12mod sample_time;
13
14#[cfg(not(any(adc_f1, adc_v1)))] 11#[cfg(not(any(adc_f1, adc_v1)))]
15mod resolution; 12mod resolution;
13#[cfg(not(adc_v1))]
14mod sample_time;
16 15
17#[allow(unused)] 16#[allow(unused)]
18pub use _version::*; 17pub use _version::*;
diff --git a/embassy-stm32/src/adc/resolution.rs b/embassy-stm32/src/adc/resolution.rs
index 354cabfb3..62b52a46c 100644
--- a/embassy-stm32/src/adc/resolution.rs
+++ b/embassy-stm32/src/adc/resolution.rs
@@ -1,4 +1,5 @@
1#[cfg(any(adc_v2, adc_v3, adc_g0))] 1#[cfg(any(adc_v2, adc_v3, adc_g0))]
2#[derive(Clone, Copy, Debug, Eq, PartialEq)]
2pub enum Resolution { 3pub enum Resolution {
3 TwelveBit, 4 TwelveBit,
4 TenBit, 5 TenBit,
@@ -7,6 +8,7 @@ pub enum Resolution {
7} 8}
8 9
9#[cfg(adc_v4)] 10#[cfg(adc_v4)]
11#[derive(Clone, Copy, Debug, Eq, PartialEq)]
10pub enum Resolution { 12pub enum Resolution {
11 SixteenBit, 13 SixteenBit,
12 FourteenBit, 14 FourteenBit,
@@ -28,9 +30,9 @@ impl Default for Resolution {
28 } 30 }
29} 31}
30 32
31impl Resolution { 33impl From<Resolution> for crate::pac::adc::vals::Res {
32 pub(super) fn res(&self) -> crate::pac::adc::vals::Res { 34 fn from(res: Resolution) -> crate::pac::adc::vals::Res {
33 match self { 35 match res {
34 #[cfg(adc_v4)] 36 #[cfg(adc_v4)]
35 Resolution::SixteenBit => crate::pac::adc::vals::Res::SIXTEENBIT, 37 Resolution::SixteenBit => crate::pac::adc::vals::Res::SIXTEENBIT,
36 #[cfg(adc_v4)] 38 #[cfg(adc_v4)]
@@ -42,7 +44,9 @@ impl Resolution {
42 Resolution::SixBit => crate::pac::adc::vals::Res::SIXBIT, 44 Resolution::SixBit => crate::pac::adc::vals::Res::SIXBIT,
43 } 45 }
44 } 46 }
47}
45 48
49impl Resolution {
46 pub fn to_max_count(&self) -> u32 { 50 pub fn to_max_count(&self) -> u32 {
47 match self { 51 match self {
48 #[cfg(adc_v4)] 52 #[cfg(adc_v4)]
diff --git a/embassy-stm32/src/adc/sample_time.rs b/embassy-stm32/src/adc/sample_time.rs
index 1850d80fb..60ba80048 100644
--- a/embassy-stm32/src/adc/sample_time.rs
+++ b/embassy-stm32/src/adc/sample_time.rs
@@ -9,10 +9,10 @@ macro_rules! impl_sample_time {
9 )* 9 )*
10 } 10 }
11 11
12 impl SampleTime { 12 impl From<SampleTime> for $pac {
13 pub(crate) fn sample_time(&self) -> $pac { 13 fn from(sample_time: SampleTime) -> $pac {
14 match self { 14 match sample_time {
15 $(Self::$variant => <$pac>::$pac_variant),* 15 $(SampleTime::$variant => <$pac>::$pac_variant),*
16 } 16 }
17 } 17 }
18 } 18 }
diff --git a/embassy-stm32/src/adc/v2.rs b/embassy-stm32/src/adc/v2.rs
index e2678fe4a..30ac5d872 100644
--- a/embassy-stm32/src/adc/v2.rs
+++ b/embassy-stm32/src/adc/v2.rs
@@ -214,7 +214,7 @@ where
214 214
215 unsafe fn read_channel(&mut self, channel: u8) -> u16 { 215 unsafe fn read_channel(&mut self, channel: u8) -> u16 {
216 // Configure ADC 216 // Configure ADC
217 T::regs().cr1().modify(|reg| reg.set_res(self.resolution.res())); 217 T::regs().cr1().modify(|reg| reg.set_res(self.resolution.into()));
218 218
219 // Select channel 219 // Select channel
220 T::regs().sqr3().write(|reg| reg.set_sq(0, channel)); 220 T::regs().sqr3().write(|reg| reg.set_sq(0, channel));
@@ -228,14 +228,11 @@ where
228 } 228 }
229 229
230 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) { 230 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) {
231 let sample_time = sample_time.into();
231 if ch <= 9 { 232 if ch <= 9 {
232 T::regs() 233 T::regs().smpr2().modify(|reg| reg.set_smp(ch as _, sample_time));
233 .smpr2()
234 .modify(|reg| reg.set_smp(ch as _, sample_time.sample_time()));
235 } else { 234 } else {
236 T::regs() 235 T::regs().smpr1().modify(|reg| reg.set_smp((ch - 10) as _, sample_time));
237 .smpr1()
238 .modify(|reg| reg.set_smp((ch - 10) as _, sample_time.sample_time()));
239 } 236 }
240 } 237 }
241} 238}
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs
index 7bc130e55..7962f2414 100644
--- a/embassy-stm32/src/adc/v3.rs
+++ b/embassy-stm32/src/adc/v3.rs
@@ -199,9 +199,9 @@ impl<'d, T: Instance> Adc<'d, T> {
199 199
200 // Configure ADC 200 // Configure ADC
201 #[cfg(not(stm32g0))] 201 #[cfg(not(stm32g0))]
202 T::regs().cfgr().modify(|reg| reg.set_res(self.resolution.res())); 202 T::regs().cfgr().modify(|reg| reg.set_res(self.resolution.into()));
203 #[cfg(stm32g0)] 203 #[cfg(stm32g0)]
204 T::regs().cfgr1().modify(|reg| reg.set_res(self.resolution.res())); 204 T::regs().cfgr1().modify(|reg| reg.set_res(self.resolution.into()));
205 205
206 // Configure channel 206 // Configure channel
207 Self::set_channel_sample_time(pin.channel(), self.sample_time); 207 Self::set_channel_sample_time(pin.channel(), self.sample_time);
@@ -231,19 +231,16 @@ impl<'d, T: Instance> Adc<'d, T> {
231 231
232 #[cfg(stm32g0)] 232 #[cfg(stm32g0)]
233 unsafe fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { 233 unsafe fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) {
234 T::regs().smpr().modify(|reg| reg.set_smp1(sample_time.sample_time())); 234 T::regs().smpr().modify(|reg| reg.set_smp1(sample_time.into()));
235 } 235 }
236 236
237 #[cfg(not(stm32g0))] 237 #[cfg(not(stm32g0))]
238 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) { 238 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) {
239 let sample_time = sample_time.into();
239 if ch <= 9 { 240 if ch <= 9 {
240 T::regs() 241 T::regs().smpr1().modify(|reg| reg.set_smp(ch as _, sample_time));
241 .smpr1()
242 .modify(|reg| reg.set_smp(ch as _, sample_time.sample_time()));
243 } else { 242 } else {
244 T::regs() 243 T::regs().smpr2().modify(|reg| reg.set_smp((ch - 10) as _, sample_time));
245 .smpr2()
246 .modify(|reg| reg.set_smp((ch - 10) as _, sample_time.sample_time()));
247 } 244 }
248 } 245 }
249} 246}
diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs
index 9dc5318e2..dc5f62d3c 100644
--- a/embassy-stm32/src/adc/v4.rs
+++ b/embassy-stm32/src/adc/v4.rs
@@ -409,7 +409,7 @@ impl<'d, T: Instance + crate::rcc::RccPeripheral> Adc<'d, T> {
409 409
410 unsafe fn read_channel(&mut self, channel: u8) -> u16 { 410 unsafe fn read_channel(&mut self, channel: u8) -> u16 {
411 // Configure ADC 411 // Configure ADC
412 T::regs().cfgr().modify(|reg| reg.set_res(self.resolution.res())); 412 T::regs().cfgr().modify(|reg| reg.set_res(self.resolution.into()));
413 413
414 // Configure channel 414 // Configure channel
415 Self::set_channel_sample_time(channel, self.sample_time); 415 Self::set_channel_sample_time(channel, self.sample_time);
@@ -427,14 +427,11 @@ impl<'d, T: Instance + crate::rcc::RccPeripheral> Adc<'d, T> {
427 } 427 }
428 428
429 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) { 429 unsafe fn set_channel_sample_time(ch: u8, sample_time: SampleTime) {
430 let sample_time = sample_time.into();
430 if ch <= 9 { 431 if ch <= 9 {
431 T::regs() 432 T::regs().smpr(0).modify(|reg| reg.set_smp(ch as _, sample_time));
432 .smpr(0)
433 .modify(|reg| reg.set_smp(ch as _, sample_time.sample_time()));
434 } else { 433 } else {
435 T::regs() 434 T::regs().smpr(1).modify(|reg| reg.set_smp((ch - 10) as _, sample_time));
436 .smpr(1)
437 .modify(|reg| reg.set_smp((ch - 10) as _, sample_time.sample_time()));
438 } 435 }
439 } 436 }
440} 437}