22
33use core:: marker:: PhantomData ;
44
5- use crate :: stm32 :: { EXTI , SYSCFG } ;
5+ use crate :: pac :: { EXTI , SYSCFG } ;
66
77/// Extension trait to split a GPIO peripheral in independent pins and registers
88pub trait GpioExt {
@@ -236,7 +236,7 @@ macro_rules! exti {
236236}
237237
238238macro_rules! gpio {
239- ( $GPIOX: ident, $gpiox: ident, $iopxenr : ident , $PXx: ident, $extigpionr: expr, [
239+ ( $GPIOX: ident, $gpiox: ident, $rcc_bit : expr , $PXx: ident, $extigpionr: expr, [
240240 $( $PXi: ident: ( $pxi: ident, $i: expr, $MODE: ty, $exticri: ident) , ) +
241241 ] ) => {
242242 /// GPIO
@@ -245,9 +245,9 @@ macro_rules! gpio {
245245 use core:: convert:: Infallible ;
246246
247247 use embedded_hal:: digital:: v2:: { InputPin , OutputPin , StatefulOutputPin , toggleable} ;
248- use crate :: stm32 :: $GPIOX;
248+ use crate :: pac :: $GPIOX;
249249
250- use crate :: stm32 :: { RCC , EXTI , SYSCFG } ;
250+ use crate :: { pac :: { RCC , EXTI , SYSCFG } , bb } ;
251251 use super :: {
252252 Alternate , AlternateOD , Floating , GpioExt , Input , OpenDrain , Output , Speed ,
253253 PullDown , PullUp , PushPull , AF0 , AF1 , AF2 , AF3 , AF4 , AF5 , AF6 , AF7 , AF8 , AF9 , AF10 ,
@@ -266,10 +266,13 @@ macro_rules! gpio {
266266 type Parts = Parts ;
267267
268268 fn split( self ) -> Parts {
269- // NOTE( unsafe) This executes only during initialisation
270- let rcc = unsafe { & ( * RCC :: ptr ( ) ) } ;
271- rcc. ahb1enr . modify ( |_ , w| w . $iopxenr ( ) . set_bit ( ) ) ;
269+ unsafe {
270+ // NOTE(unsafe) this reference will only be used for atomic writes with no side effects.
271+ let rcc = & ( * RCC :: ptr ( ) ) ;
272272
273+ // Enable clock.
274+ bb:: set( & rcc. ahb1enr, $rcc_bit) ;
275+ }
273276 Parts {
274277 $(
275278 $pxi: $PXi { _mode: PhantomData } ,
@@ -834,7 +837,7 @@ macro_rules! gpio {
834837 feature = "stm32f469" ,
835838 feature = "stm32f479"
836839) ) ]
837- gpio ! ( GPIOA , gpioa, gpioaen , PA , 0 , [
840+ gpio ! ( GPIOA , gpioa, 0 , PA , 0 , [
838841 PA0 : ( pa0, 0 , Input <Floating >, exticr1) ,
839842 PA1 : ( pa1, 1 , Input <Floating >, exticr1) ,
840843 PA2 : ( pa2, 2 , Input <Floating >, exticr1) ,
@@ -872,7 +875,7 @@ gpio!(GPIOA, gpioa, gpioaen, PA, 0, [
872875 feature = "stm32f469" ,
873876 feature = "stm32f479"
874877) ) ]
875- gpio ! ( GPIOB , gpiob, gpioben , PB , 1 , [
878+ gpio ! ( GPIOB , gpiob, 1 , PB , 1 , [
876879 PB0 : ( pb0, 0 , Input <Floating >, exticr1) ,
877880 PB1 : ( pb1, 1 , Input <Floating >, exticr1) ,
878881 PB2 : ( pb2, 2 , Input <Floating >, exticr1) ,
@@ -910,7 +913,7 @@ gpio!(GPIOB, gpiob, gpioben, PB, 1, [
910913 feature = "stm32f469" ,
911914 feature = "stm32f479"
912915) ) ]
913- gpio ! ( GPIOC , gpioc, gpiocen , PC , 2 , [
916+ gpio ! ( GPIOC , gpioc, 2 , PC , 2 , [
914917 PC0 : ( pc0, 0 , Input <Floating >, exticr1) ,
915918 PC1 : ( pc1, 1 , Input <Floating >, exticr1) ,
916919 PC2 : ( pc2, 2 , Input <Floating >, exticr1) ,
@@ -947,7 +950,7 @@ gpio!(GPIOC, gpioc, gpiocen, PC, 2, [
947950 feature = "stm32f469" ,
948951 feature = "stm32f479"
949952) ) ]
950- gpio ! ( GPIOD , gpiod, gpioden , PD , 3 , [
953+ gpio ! ( GPIOD , gpiod, 3 , PD , 3 , [
951954 PD0 : ( pd0, 0 , Input <Floating >, exticr1) ,
952955 PD1 : ( pd1, 1 , Input <Floating >, exticr1) ,
953956 PD2 : ( pd2, 2 , Input <Floating >, exticr1) ,
@@ -984,7 +987,7 @@ gpio!(GPIOD, gpiod, gpioden, PD, 3, [
984987 feature = "stm32f469" ,
985988 feature = "stm32f479"
986989) ) ]
987- gpio ! ( GPIOE , gpioe, gpioeen , PE , 4 , [
990+ gpio ! ( GPIOE , gpioe, 4 , PE , 4 , [
988991 PE0 : ( pe0, 0 , Input <Floating >, exticr1) ,
989992 PE1 : ( pe1, 1 , Input <Floating >, exticr1) ,
990993 PE2 : ( pe2, 2 , Input <Floating >, exticr1) ,
@@ -1019,7 +1022,7 @@ gpio!(GPIOE, gpioe, gpioeen, PE, 4, [
10191022 feature = "stm32f469" ,
10201023 feature = "stm32f479"
10211024) ) ]
1022- gpio ! ( GPIOF , gpiof, gpiofen , PF , 5 , [
1025+ gpio ! ( GPIOF , gpiof, 5 , PF , 5 , [
10231026 PF0 : ( pf0, 0 , Input <Floating >, exticr1) ,
10241027 PF1 : ( pf1, 1 , Input <Floating >, exticr1) ,
10251028 PF2 : ( pf2, 2 , Input <Floating >, exticr1) ,
@@ -1054,7 +1057,7 @@ gpio!(GPIOF, gpiof, gpiofen, PF, 5, [
10541057 feature = "stm32f469" ,
10551058 feature = "stm32f479"
10561059) ) ]
1057- gpio ! ( GPIOG , gpiog, gpiogen , PG , 6 , [
1060+ gpio ! ( GPIOG , gpiog, 6 , PG , 6 , [
10581061 PG0 : ( pg0, 0 , Input <Floating >, exticr1) ,
10591062 PG1 : ( pg1, 1 , Input <Floating >, exticr1) ,
10601063 PG2 : ( pg2, 2 , Input <Floating >, exticr1) ,
@@ -1091,7 +1094,7 @@ gpio!(GPIOG, gpiog, gpiogen, PG, 6, [
10911094 feature = "stm32f469" ,
10921095 feature = "stm32f479"
10931096) ) ]
1094- gpio ! ( GPIOH , gpioh, gpiohen , PH , 7 , [
1097+ gpio ! ( GPIOH , gpioh, 7 , PH , 7 , [
10951098 PH0 : ( ph0, 0 , Input <Floating >, exticr1) ,
10961099 PH1 : ( ph1, 1 , Input <Floating >, exticr1) ,
10971100 PH2 : ( ph2, 2 , Input <Floating >, exticr1) ,
@@ -1111,7 +1114,7 @@ gpio!(GPIOH, gpioh, gpiohen, PH, 7, [
11111114] ) ;
11121115
11131116#[ cfg( any( feature = "stm32f401" ) ) ]
1114- gpio ! ( GPIOH , gpioh, gpiohen , PH , 7 , [
1117+ gpio ! ( GPIOH , gpioh, 7 , PH , 7 , [
11151118 PH0 : ( ph0, 0 , Input <Floating >, exticr1) ,
11161119 PH1 : ( ph1, 1 , Input <Floating >, exticr1) ,
11171120] ) ;
@@ -1128,7 +1131,7 @@ gpio!(GPIOH, gpioh, gpiohen, PH, 7, [
11281131 feature = "stm32f469" ,
11291132 feature = "stm32f479"
11301133) ) ]
1131- gpio ! ( GPIOI , gpioi, gpioien , PI , 8 , [
1134+ gpio ! ( GPIOI , gpioi, 8 , PI , 8 , [
11321135 PI0 : ( pi0, 0 , Input <Floating >, exticr1) ,
11331136 PI1 : ( pi1, 1 , Input <Floating >, exticr1) ,
11341137 PI2 : ( pi2, 2 , Input <Floating >, exticr1) ,
@@ -1155,7 +1158,7 @@ gpio!(GPIOI, gpioi, gpioien, PI, 8, [
11551158 feature = "stm32f469" ,
11561159 feature = "stm32f479"
11571160) ) ]
1158- gpio ! ( GPIOJ , gpioj, gpiojen , PJ , 9 , [
1161+ gpio ! ( GPIOJ , gpioj, 9 , PJ , 9 , [
11591162 PJ0 : ( pj0, 0 , Input <Floating >, exticr1) ,
11601163 PJ1 : ( pj1, 1 , Input <Floating >, exticr1) ,
11611164 PJ2 : ( pj2, 2 , Input <Floating >, exticr1) ,
@@ -1182,7 +1185,7 @@ gpio!(GPIOJ, gpioj, gpiojen, PJ, 9, [
11821185 feature = "stm32f469" ,
11831186 feature = "stm32f479"
11841187) ) ]
1185- gpio ! ( GPIOK , gpiok, gpioken , PK , 10 , [
1188+ gpio ! ( GPIOK , gpiok, 10 , PK , 10 , [
11861189 PK0 : ( pk0, 0 , Input <Floating >, exticr1) ,
11871190 PK1 : ( pk1, 1 , Input <Floating >, exticr1) ,
11881191 PK2 : ( pk2, 2 , Input <Floating >, exticr1) ,
0 commit comments