@@ -13,7 +13,7 @@ pub use crate::time::U32Ext as _;
13
13
use crate :: {
14
14
dma:: { mux:: DmaMuxResources , traits:: TargetAddress , PeripheralToMemory } ,
15
15
gpio:: * ,
16
- opamp,
16
+ opamp:: { self , InternalOutput } ,
17
17
rcc:: { Enable , Rcc , Reset } ,
18
18
signature:: { VtempCal130 , VtempCal30 , VDDA_CALIB } ,
19
19
stm32,
@@ -144,21 +144,25 @@ macro_rules! adc_pins {
144
144
} ;
145
145
}
146
146
147
- macro_rules! adc_op_pga {
147
+ macro_rules! adc_opamp {
148
148
( $( $opamp: ty => ( $adc: ident, $chan: expr) ) ,+ $( , ) * ) => {
149
149
$(
150
- impl <A , B > Channel <stm32:: $adc> for $opamp {
150
+ impl <A > Channel <stm32:: $adc> for opamp :: Follower < $opamp, A , InternalOutput > {
151
151
type ID = u8 ;
152
152
fn channel( ) -> u8 { $chan }
153
153
}
154
- ) +
155
- } ;
156
- }
157
154
158
- macro_rules! adc_op_follower {
159
- ( $( $opamp: ty => ( $adc: ident, $chan: expr) ) ,+ $( , ) * ) => {
160
- $(
161
- impl <A > Channel <stm32:: $adc> for $opamp {
155
+ impl <A , B > Channel <stm32:: $adc> for opamp:: OpenLoop <$opamp, A , B , InternalOutput > {
156
+ type ID = u8 ;
157
+ fn channel( ) -> u8 { $chan }
158
+ }
159
+
160
+ impl <A > Channel <stm32:: $adc> for opamp:: Pga <$opamp, A , InternalOutput > {
161
+ type ID = u8 ;
162
+ fn channel( ) -> u8 { $chan }
163
+ }
164
+
165
+ impl Channel <stm32:: $adc> for opamp:: Locked <$opamp, InternalOutput > {
162
166
type ID = u8 ;
163
167
fn channel( ) -> u8 { $chan }
164
168
}
@@ -2811,21 +2815,13 @@ adc_pins!(
2811
2815
) ;
2812
2816
2813
2817
// See https://www.st.com/resource/en/reference_manual/rm0440-stm32g4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf#page=782
2814
- adc_op_pga ! (
2818
+ adc_opamp ! (
2815
2819
// TODO: Add all opamp types: OpenLoop, Follower(for all opamps)
2816
2820
// TODO: Should we restrict type parameters A and B?
2817
2821
// TODO: Also allow AD-channels shared by pins
2818
- opamp:: opamp1:: Pga <A , B > => ( ADC1 , 13 ) ,
2819
- opamp:: opamp2:: Pga <A , B > => ( ADC2 , 16 ) ,
2820
-
2821
- opamp:: opamp3:: Pga <A , B > => ( ADC2 , 18 ) ,
2822
- ) ;
2823
-
2824
- adc_op_follower ! (
2825
- opamp:: opamp1:: Follower <A > => ( ADC1 , 13 ) ,
2826
- opamp:: opamp2:: Follower <A > => ( ADC2 , 16 ) ,
2827
-
2828
- opamp:: opamp3:: Follower <A > => ( ADC2 , 18 ) ,
2822
+ opamp:: Opamp1 => ( ADC1 , 13 ) ,
2823
+ opamp:: Opamp2 => ( ADC2 , 16 ) ,
2824
+ opamp:: Opamp3 => ( ADC2 , 18 ) ,
2829
2825
) ;
2830
2826
2831
2827
#[ cfg( any(
@@ -2836,16 +2832,16 @@ adc_op_follower!(
2836
2832
feature = "stm32g491" ,
2837
2833
feature = "stm32g4a1" ,
2838
2834
) ) ]
2839
- adc_op_pga ! (
2840
- opamp:: opamp3 :: Pga < A , B > => ( ADC3 , 13 ) ,
2841
- opamp:: opamp4 :: Pga < A , B > => ( ADC5 , 5 ) ,
2842
- opamp:: opamp5 :: Pga < A , B > => ( ADC5 , 3 ) ,
2843
- opamp:: opamp6 :: Pga < A , B > => ( ADC4 , 17 ) ,
2835
+ adc_opamp ! (
2836
+ opamp:: Opamp3 => ( ADC3 , 13 ) ,
2837
+ opamp:: Opamp4 => ( ADC5 , 5 ) ,
2838
+ opamp:: Opamp5 => ( ADC5 , 3 ) ,
2839
+ opamp:: Opamp6 => ( ADC4 , 17 ) ,
2844
2840
) ;
2845
2841
2846
2842
#[ cfg( any( feature = "stm32g491" , feature = "stm32g4a1" , ) ) ]
2847
- adc_op_pga ! (
2848
- opamp:: opamp6 :: Pga < A , B > => ( ADC3 , 17 ) ,
2843
+ adc_opamp ! (
2844
+ opamp:: Opamp6 => ( ADC3 , 17 ) ,
2849
2845
) ;
2850
2846
2851
2847
#[ cfg( any( feature = "stm32g491" , feature = "stm32g4a1" , ) ) ]
0 commit comments