@@ -13,7 +13,7 @@ pub use crate::time::U32Ext as _;
1313use crate :: {
1414 dma:: { mux:: DmaMuxResources , traits:: TargetAddress , PeripheralToMemory } ,
1515 gpio:: * ,
16- opamp,
16+ opamp:: { self , InternalOutput } ,
1717 rcc:: { Enable , Rcc , Reset } ,
1818 signature:: { VtempCal130 , VtempCal30 , VDDA_CALIB } ,
1919 stm32,
@@ -144,21 +144,25 @@ macro_rules! adc_pins {
144144 } ;
145145}
146146
147- macro_rules! adc_op_pga {
147+ macro_rules! adc_opamp {
148148 ( $( $opamp: ty => ( $adc: ident, $chan: expr) ) ,+ $( , ) * ) => {
149149 $(
150- impl <A , B > Channel <stm32:: $adc> for $opamp {
150+ impl <A > Channel <stm32:: $adc> for opamp :: Follower < $opamp, A , InternalOutput > {
151151 type ID = u8 ;
152152 fn channel( ) -> u8 { $chan }
153153 }
154- ) +
155- } ;
156- }
157154
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 > {
162166 type ID = u8 ;
163167 fn channel( ) -> u8 { $chan }
164168 }
@@ -2811,21 +2815,13 @@ adc_pins!(
28112815) ;
28122816
28132817// 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 ! (
28152819 // TODO: Add all opamp types: OpenLoop, Follower(for all opamps)
28162820 // TODO: Should we restrict type parameters A and B?
28172821 // 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 ) ,
28292825) ;
28302826
28312827#[ cfg( any(
@@ -2836,16 +2832,16 @@ adc_op_follower!(
28362832 feature = "stm32g491" ,
28372833 feature = "stm32g4a1" ,
28382834) ) ]
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 ) ,
28442840) ;
28452841
28462842#[ 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 ) ,
28492845) ;
28502846
28512847#[ cfg( any( feature = "stm32g491" , feature = "stm32g4a1" , ) ) ]
0 commit comments