Refactor: Use PeripheralRef

This commit is contained in:
Grant Miller 2022-10-26 18:36:04 -05:00
parent 08c8022583
commit 171b764d82
5 changed files with 16 additions and 23 deletions

View File

@ -1,5 +1,3 @@
use core::marker::PhantomData;
use embassy_hal_common::into_ref; use embassy_hal_common::into_ref;
use embedded_hal_02::blocking::delay::DelayUs; use embedded_hal_02::blocking::delay::DelayUs;
@ -30,8 +28,8 @@ impl<T: Instance> super::sealed::AdcPin<T> for Temperature {
} }
impl<'d, T: Instance> Adc<'d, T> { impl<'d, T: Instance> Adc<'d, T> {
pub fn new(_peri: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self { pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self {
into_ref!(_peri); into_ref!(adc);
T::enable(); T::enable();
T::reset(); T::reset();
unsafe { unsafe {
@ -60,8 +58,8 @@ impl<'d, T: Instance> Adc<'d, T> {
delay.delay_us((1_000_000) / Self::freq().0 + 1); delay.delay_us((1_000_000) / Self::freq().0 + 1);
Self { Self {
adc,
sample_time: Default::default(), sample_time: Default::default(),
phantom: PhantomData,
} }
} }

View File

@ -23,8 +23,9 @@ use crate::peripherals;
#[cfg(not(adc_v1))] #[cfg(not(adc_v1))]
pub struct Adc<'d, T: Instance> { pub struct Adc<'d, T: Instance> {
#[allow(unused)]
adc: crate::PeripheralRef<'d, T>,
sample_time: SampleTime, sample_time: SampleTime,
phantom: core::marker::PhantomData<&'d mut T>,
} }
pub(crate) mod sealed { pub(crate) mod sealed {
@ -44,9 +45,9 @@ pub(crate) mod sealed {
} }
#[cfg(not(any(adc_f1, adc_v2, adc_v4)))] #[cfg(not(any(adc_f1, adc_v2, adc_v4)))]
pub trait Instance: sealed::Instance + 'static {} pub trait Instance: sealed::Instance + crate::Peripheral<P = Self> {}
#[cfg(any(adc_f1, adc_v2, adc_v4))] #[cfg(any(adc_f1, adc_v2, adc_v4))]
pub trait Instance: sealed::Instance + crate::rcc::RccPeripheral + 'static {} pub trait Instance: sealed::Instance + crate::Peripheral<P = Self> + crate::rcc::RccPeripheral {}
pub trait AdcPin<T: Instance>: sealed::AdcPin<T> {} pub trait AdcPin<T: Instance>: sealed::AdcPin<T> {}
pub trait InternalChannel<T>: sealed::InternalChannel<T> {} pub trait InternalChannel<T>: sealed::InternalChannel<T> {}

View File

@ -1,5 +1,3 @@
use core::marker::PhantomData;
use embassy_hal_common::into_ref; use embassy_hal_common::into_ref;
use embedded_hal_02::blocking::delay::DelayUs; use embedded_hal_02::blocking::delay::DelayUs;
@ -96,8 +94,8 @@ impl<'d, T> Adc<'d, T>
where where
T: Instance, T: Instance,
{ {
pub fn new(_peri: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self { pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self {
into_ref!(_peri); into_ref!(adc);
T::enable(); T::enable();
T::reset(); T::reset();
@ -113,8 +111,8 @@ where
delay.delay_us(ADC_POWERUP_TIME_US); delay.delay_us(ADC_POWERUP_TIME_US);
Self { Self {
adc,
sample_time: Default::default(), sample_time: Default::default(),
phantom: PhantomData,
} }
} }

View File

@ -1,5 +1,3 @@
use core::marker::PhantomData;
use embassy_hal_common::into_ref; use embassy_hal_common::into_ref;
use embedded_hal_02::blocking::delay::DelayUs; use embedded_hal_02::blocking::delay::DelayUs;
@ -61,8 +59,8 @@ impl<T: Instance> super::sealed::AdcPin<T> for Vbat {
} }
impl<'d, T: Instance> Adc<'d, T> { impl<'d, T: Instance> Adc<'d, T> {
pub fn new(_peri: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self { pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self {
into_ref!(_peri); into_ref!(adc);
enable(); enable();
unsafe { unsafe {
T::regs().cr().modify(|reg| { T::regs().cr().modify(|reg| {
@ -92,8 +90,8 @@ impl<'d, T: Instance> Adc<'d, T> {
delay.delay_us(1); delay.delay_us(1);
Self { Self {
adc,
sample_time: Default::default(), sample_time: Default::default(),
phantom: PhantomData,
} }
} }

View File

@ -1,5 +1,3 @@
use core::marker::PhantomData;
use atomic_polyfill::{AtomicU8, Ordering}; use atomic_polyfill::{AtomicU8, Ordering};
use embedded_hal_02::blocking::delay::DelayUs; use embedded_hal_02::blocking::delay::DelayUs;
use pac::adc::vals::{Adcaldif, Boost, Difsel, Exten, Pcsel}; use pac::adc::vals::{Adcaldif, Boost, Difsel, Exten, Pcsel};
@ -226,8 +224,8 @@ impl Prescaler {
} }
impl<'d, T: Instance> Adc<'d, T> { impl<'d, T: Instance> Adc<'d, T> {
pub fn new(_peri: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u16>) -> Self { pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u16>) -> Self {
embassy_hal_common::into_ref!(_peri); embassy_hal_common::into_ref!(adc);
T::enable(); T::enable();
T::reset(); T::reset();
@ -257,8 +255,8 @@ impl<'d, T: Instance> Adc<'d, T> {
} }
let mut s = Self { let mut s = Self {
adc,
sample_time: Default::default(), sample_time: Default::default(),
phantom: PhantomData,
}; };
s.power_up(delay); s.power_up(delay);
s.configure_differential_inputs(); s.configure_differential_inputs();