rp: disable adc hardware on Adc drop

the adc constantly pulls a small but significant amount of current while
the hardware is enabled. this can have quite an effect on sleeping
devices that also use the adc.
This commit is contained in:
pennae 2023-07-20 15:48:59 +02:00
parent 3382ca1a54
commit a3d4ae85b0

View File

@ -81,6 +81,16 @@ pub struct Adc<'d, M: Mode> {
phantom: PhantomData<(&'d ADC, M)>, phantom: PhantomData<(&'d ADC, M)>,
} }
impl<'d, M: Mode> Drop for Adc<'d, M> {
fn drop(&mut self) {
let r = Self::regs();
// disable ADC. leaving it enabled comes with a ~150µA static
// current draw. the temperature sensor has already been disabled
// by the temperature-reading methods, so we don't need to touch that.
r.cs().write(|w| w.set_en(false));
}
}
impl<'d, M: Mode> Adc<'d, M> { impl<'d, M: Mode> Adc<'d, M> {
#[inline] #[inline]
fn regs() -> pac::adc::Adc { fn regs() -> pac::adc::Adc {