From d9be0210ac579b4b1053786b16580b2cca175df0 Mon Sep 17 00:00:00 2001 From: K Date: Wed, 15 Jul 2020 15:02:45 +0500 Subject: [PATCH 1/2] Added support for continuous and discontinuous scan mode --- src/adc.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/adc.rs b/src/adc.rs index f6cd520b..ffc26d93 100644 --- a/src/adc.rs +++ b/src/adc.rs @@ -344,6 +344,17 @@ macro_rules! adc_hal { self.rb.sqr1.modify(|_, w| w.l().bits((len-1) as u8)); } + fn set_continuous_mode(&mut self, continuous: bool) { + self.rb.cr2.modify(|_, w| w.cont().bit(continuous)); + } + + fn set_discontinuous_mode(&mut self, channels_count: Option) { + self.rb.cr1.modify(|_, w| match channels_count { + Some(count) => w.discen().set_bit().discnum().bits(count), + None => w.discen().clear_bit(), + }); + } + /** Performs an ADC conversion @@ -397,6 +408,14 @@ macro_rules! adc_hal { fn set_regular_sequence (&mut self, channels: &[u8]) { self.set_regular_sequence(channels); } + #[inline(always)] + fn set_continuous_mode(&mut self, continuous: bool) { + self.set_continuous_mode(continuous); + } + #[inline(always)] + fn set_discontinuous_mode(&mut self, channels: Option) { + self.set_discontinuous_mode(channels); + } } impl OneShot<$ADC, WORD, PIN> for Adc<$ADC> @@ -526,6 +545,14 @@ pub trait ChannelTimeSequence { /// /// Define a sequence of channels to be converted as a regular group. fn set_regular_sequence(&mut self, channels: &[u8]); + /// Set ADC continuous conversion + /// + /// When continuous conversion is enabled conversion does not stop at the last selected group channel but continues again from the first selected group channel. + fn set_continuous_mode(&mut self, continuous: bool); + /// Set ADC discontinuous mode + /// + /// It can be used to convert a short sequence of conversions (up to 8) which is a part of the regular sequence of conversions. + fn set_discontinuous_mode(&mut self, channels_count: Option); } /// Set channel sequence and sample times for custom pins @@ -540,6 +567,10 @@ pub trait ChannelTimeSequence { /// } /// fn set_sequence(&mut self) { /// self.set_regular_sequence(&[0, 2, 0, 2]); +/// // Optionally we can set continuous scan mode +/// self.set_continuous_mode(true); +/// // Also we can use discontinuous conversion (3 channels per conversion) +/// self.set_discontinuous_mode(Some(3)); /// } /// } /// ``` From f387c33fb5460e483c4b221e07a0137567050cd4 Mon Sep 17 00:00:00 2001 From: K Date: Thu, 13 Aug 2020 11:26:25 +0500 Subject: [PATCH 2/2] Add changelog for #247 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50fa588d..44033a66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/). MonoTimer now takes ownership of the DCB register +### Added + +- Add support for ADC continuous conversion +- Add supoort for ADC discontinuous mode + ### Fixed - Fix MonoTimer not working in debug mode.