@@ -694,6 +694,79 @@ pub mod config {
694
694
}
695
695
}
696
696
697
+ /// Possible oversampling shift
698
+ #[ derive( Debug , Clone , Copy ) ]
699
+ pub enum OverSamplingShift {
700
+ /// No right shift
701
+ NoShift ,
702
+ /// Shift of 1 toward the right
703
+ Shift_1 ,
704
+ /// Shift of 2 toward the right
705
+ Shift_2 ,
706
+ /// Shift of 3 toward the right
707
+ Shift_3 ,
708
+ /// Shift of 4 toward the right
709
+ Shift_4 ,
710
+ /// Shift of 5 toward the right
711
+ Shift_5 ,
712
+ /// Shift of 6 toward the right
713
+ Shift_6 ,
714
+ /// Shift of 7 toward the right
715
+ Shift_7 ,
716
+ /// Shift of 8 toward the right
717
+ Shift_8 ,
718
+ }
719
+ impl From < OverSamplingShift > for u8 {
720
+ fn from ( oss : OverSamplingShift ) -> u8 {
721
+ match oss {
722
+ OverSamplingShift :: NoShift => 0 ,
723
+ OverSamplingShift :: Shift_1 => 1 ,
724
+ OverSamplingShift :: Shift_2 => 2 ,
725
+ OverSamplingShift :: Shift_3 => 3 ,
726
+ OverSamplingShift :: Shift_4 => 4 ,
727
+ OverSamplingShift :: Shift_5 => 5 ,
728
+ OverSamplingShift :: Shift_6 => 6 ,
729
+ OverSamplingShift :: Shift_7 => 7 ,
730
+ OverSamplingShift :: Shift_8 => 8 ,
731
+ }
732
+ }
733
+ }
734
+
735
+ /// Possible oversampling modes
736
+ #[ derive( Debug , Clone , Copy ) ]
737
+ pub enum OverSampling {
738
+ /// Oversampling 2x
739
+ Ratio_2 ,
740
+ /// Oversampling 4x
741
+ Ratio_4 ,
742
+ /// Oversampling 8x
743
+ Ratio_8 ,
744
+ /// Oversampling 16x
745
+ Ratio_16 ,
746
+ /// Oversampling 32x
747
+ Ratio_32 ,
748
+ /// Oversampling 64x
749
+ Ratio_64 ,
750
+ /// Oversampling 128x
751
+ Ratio_128 ,
752
+ /// Oversampling 256x
753
+ Ratio_256 ,
754
+ }
755
+ impl From < OverSampling > for u8 {
756
+ fn from ( os : OverSampling ) -> u8 {
757
+ match os {
758
+ OverSampling :: Ratio_2 => 0 ,
759
+ OverSampling :: Ratio_4 => 1 ,
760
+ OverSampling :: Ratio_8 => 2 ,
761
+ OverSampling :: Ratio_16 => 3 ,
762
+ OverSampling :: Ratio_32 => 4 ,
763
+ OverSampling :: Ratio_64 => 5 ,
764
+ OverSampling :: Ratio_128 => 6 ,
765
+ OverSampling :: Ratio_256 => 7 ,
766
+ }
767
+ }
768
+ }
769
+
697
770
/// Possible trigger modes
698
771
#[ derive( Debug , Clone , Copy ) ]
699
772
pub enum TriggerMode {
@@ -1653,6 +1726,15 @@ macro_rules! adc {
1653
1726
self . adc_reg. cfgr. modify( |_, w| w. res( ) . bits( resolution. into( ) ) ) ;
1654
1727
}
1655
1728
1729
+
1730
+ /// Enable oversampling
1731
+ #[ inline( always) ]
1732
+ pub fn set_oversampling( & mut self , oversampling: config:: OverSampling , shift: config:: OverSamplingShift ) {
1733
+ self . adc_reg. cfgr2. modify( |_, w| unsafe { w. ovsr( ) . bits( oversampling. into( ) )
1734
+ . ovss( ) . bits( shift. into( ) )
1735
+ . rovse( ) . set_bit( ) } ) ;
1736
+ }
1737
+
1656
1738
/// Sets the DR register alignment to left or right
1657
1739
#[ inline( always) ]
1658
1740
pub fn set_align( & mut self , align: config:: Align ) {
@@ -2219,6 +2301,12 @@ macro_rules! adc {
2219
2301
self . adc. set_clock( clock)
2220
2302
}
2221
2303
2304
+ /// Sets the oversampling
2305
+ #[ inline( always) ]
2306
+ pub fn set_oversampling( & mut self , oversampling: config:: OverSampling , shift: config:: OverSamplingShift ) {
2307
+ self . adc. set_oversampling( oversampling, shift)
2308
+ }
2309
+
2222
2310
/// Sets the sampling resolution
2223
2311
#[ inline( always) ]
2224
2312
pub fn set_resolution( & mut self , resolution: config:: Resolution ) {
0 commit comments