@@ -367,10 +367,11 @@ where
367
367
}
368
368
369
369
#[ inline( always) ]
370
- fn set_channel < C : Channel > ( & mut self , channel : C ) {
371
- unsafe { Self :: st ( ) }
372
- . cr
373
- . modify ( |_, w| w. chsel ( ) . bits ( channel. bits ( ) ) ) ;
370
+ fn set_channel < const C : u8 > ( & mut self )
371
+ where
372
+ ChannelX < C > : Channel ,
373
+ {
374
+ unsafe { Self :: st ( ) } . cr . modify ( |_, w| w. chsel ( ) . bits ( C ) ) ;
374
375
}
375
376
376
377
#[ inline( always) ]
@@ -645,30 +646,28 @@ dma_stream!(
645
646
#[ derive( Debug , Clone , Copy ) ]
646
647
pub struct ChannelX < const C : u8 > ;
647
648
648
- impl < const C : u8 > Bits < u8 > for ChannelX < C > {
649
- fn bits ( self ) -> u8 {
650
- C
651
- }
649
+ macro_rules! dma_channel {
650
+ ( $( ( $name: ident, $value: literal) ) ,+ $( , ) * ) => {
651
+ $(
652
+ impl Channel for ChannelX <$value> { }
653
+ pub type $name = ChannelX <$value>;
654
+ ) +
655
+ } ;
652
656
}
653
657
654
- impl < const C : u8 > Channel for ChannelX < C > {
655
- fn new ( ) -> Self {
656
- Self
657
- }
658
- }
659
- pub type Channel0 = ChannelX < 0 > ;
660
- pub type Channel1 = ChannelX < 1 > ;
661
- pub type Channel2 = ChannelX < 2 > ;
662
- pub type Channel3 = ChannelX < 3 > ;
663
- pub type Channel4 = ChannelX < 4 > ;
664
- pub type Channel5 = ChannelX < 5 > ;
665
- pub type Channel6 = ChannelX < 6 > ;
666
- pub type Channel7 = ChannelX < 7 > ;
658
+ dma_channel ! (
659
+ ( Channel0 , 0 ) ,
660
+ ( Channel1 , 1 ) ,
661
+ ( Channel2 , 2 ) ,
662
+ ( Channel3 , 3 ) ,
663
+ ( Channel4 , 4 ) ,
664
+ ( Channel5 , 5 ) ,
665
+ ( Channel6 , 6 ) ,
666
+ ( Channel7 , 7 ) ,
667
+ ) ;
667
668
668
669
#[ cfg( any( feature = "stm32f413" , feature = "stm32f423" ) ) ]
669
- pub type Channel8 = ChannelX < 8 > ;
670
- #[ cfg( any( feature = "stm32f413" , feature = "stm32f423" ) ) ]
671
- pub type Channel9 = ChannelX < 9 > ;
670
+ dma_channel ! ( ( Channel8 , 8 ) , ( Channel9 , 9 ) , ) ;
672
671
673
672
/// Contains types related to DMA configuration.
674
673
pub mod config {
@@ -870,13 +869,12 @@ pub mod config {
870
869
}
871
870
872
871
/// DMA Transfer.
873
- pub struct Transfer < STREAM , CHANNEL , PERIPHERAL , DIRECTION , BUF >
872
+ pub struct Transfer < STREAM , PERIPHERAL , DIRECTION , BUF , const CHANNEL : u8 >
874
873
where
875
874
STREAM : Stream ,
876
875
PERIPHERAL : PeriAddress ,
877
876
{
878
877
stream : STREAM ,
879
- _channel : PhantomData < CHANNEL > ,
880
878
peripheral : PERIPHERAL ,
881
879
_direction : PhantomData < DIRECTION > ,
882
880
buf : Option < BUF > ,
@@ -885,12 +883,12 @@ where
885
883
transfer_length : u16 ,
886
884
}
887
885
888
- impl < STREAM , CHANNEL , PERIPHERAL , BUF >
889
- Transfer < STREAM , CHANNEL , PERIPHERAL , MemoryToPeripheral , BUF >
886
+ impl < STREAM , PERIPHERAL , BUF , const CHANNEL : u8 >
887
+ Transfer < STREAM , PERIPHERAL , MemoryToPeripheral , BUF , CHANNEL >
890
888
where
891
889
STREAM : Stream ,
892
- CHANNEL : Channel ,
893
- PERIPHERAL : PeriAddress + DMASet < STREAM , CHANNEL , MemoryToPeripheral > ,
890
+ ChannelX < CHANNEL > : Channel ,
891
+ PERIPHERAL : PeriAddress + DMASet < STREAM , MemoryToPeripheral , CHANNEL > ,
894
892
BUF : StaticReadBuffer < Word = <PERIPHERAL as PeriAddress >:: MemSize > ,
895
893
{
896
894
/// Configures the DMA stream to the correct channel for the peripheral, configures source and
@@ -922,7 +920,6 @@ where
922
920
923
921
Self {
924
922
stream,
925
- _channel : PhantomData ,
926
923
peripheral,
927
924
_direction : PhantomData ,
928
925
buf : Some ( buf) ,
@@ -1017,12 +1014,12 @@ where
1017
1014
}
1018
1015
}
1019
1016
1020
- impl < STREAM , CHANNEL , PERIPHERAL , BUF >
1021
- Transfer < STREAM , CHANNEL , PERIPHERAL , PeripheralToMemory , BUF >
1017
+ impl < STREAM , PERIPHERAL , BUF , const CHANNEL : u8 >
1018
+ Transfer < STREAM , PERIPHERAL , PeripheralToMemory , BUF , CHANNEL >
1022
1019
where
1023
1020
STREAM : Stream ,
1024
- CHANNEL : Channel ,
1025
- PERIPHERAL : PeriAddress + DMASet < STREAM , CHANNEL , PeripheralToMemory > ,
1021
+ ChannelX < CHANNEL > : Channel ,
1022
+ PERIPHERAL : PeriAddress + DMASet < STREAM , PeripheralToMemory , CHANNEL > ,
1026
1023
BUF : StaticWriteBuffer < Word = <PERIPHERAL as PeriAddress >:: MemSize > ,
1027
1024
{
1028
1025
/// Configures the DMA stream to the correct channel for the peripheral, configures source and
@@ -1054,7 +1051,6 @@ where
1054
1051
1055
1052
Self {
1056
1053
stream,
1057
- _channel : PhantomData ,
1058
1054
peripheral,
1059
1055
_direction : PhantomData ,
1060
1056
buf : Some ( buf) ,
@@ -1152,12 +1148,12 @@ where
1152
1148
}
1153
1149
}
1154
1150
1155
- impl < STREAM , CHANNEL , PERIPHERAL , BUF , S >
1156
- Transfer < STREAM , CHANNEL , PERIPHERAL , MemoryToMemory < S > , BUF >
1151
+ impl < STREAM , PERIPHERAL , BUF , S , const CHANNEL : u8 >
1152
+ Transfer < STREAM , PERIPHERAL , MemoryToMemory < S > , BUF , CHANNEL >
1157
1153
where
1158
1154
STREAM : Stream ,
1159
- CHANNEL : Channel ,
1160
- PERIPHERAL : PeriAddress + DMASet < STREAM , CHANNEL , MemoryToMemory < S > > ,
1155
+ ChannelX < CHANNEL > : Channel ,
1156
+ PERIPHERAL : PeriAddress + DMASet < STREAM , MemoryToMemory < S > , CHANNEL > ,
1161
1157
MemoryToMemory < S > : PeriAddress ,
1162
1158
BUF : StaticWriteBuffer < Word = <PERIPHERAL as PeriAddress >:: MemSize > ,
1163
1159
{
@@ -1192,7 +1188,6 @@ where
1192
1188
1193
1189
Self {
1194
1190
stream,
1195
- _channel : PhantomData ,
1196
1191
peripheral,
1197
1192
_direction : PhantomData ,
1198
1193
buf : Some ( buf) ,
@@ -1252,12 +1247,13 @@ where
1252
1247
}
1253
1248
}
1254
1249
1255
- impl < STREAM , CHANNEL , PERIPHERAL , DIR , BUF > Transfer < STREAM , CHANNEL , PERIPHERAL , DIR , BUF >
1250
+ impl < STREAM , PERIPHERAL , DIR , BUF , const CHANNEL : u8 >
1251
+ Transfer < STREAM , PERIPHERAL , DIR , BUF , CHANNEL >
1256
1252
where
1257
1253
STREAM : Stream ,
1258
- CHANNEL : Channel ,
1254
+ ChannelX < CHANNEL > : Channel ,
1259
1255
DIR : Direction ,
1260
- PERIPHERAL : PeriAddress + DMASet < STREAM , CHANNEL , DIR > ,
1256
+ PERIPHERAL : PeriAddress + DMASet < STREAM , DIR , CHANNEL > ,
1261
1257
{
1262
1258
/// Starts the transfer, the closure will be executed right after enabling the stream.
1263
1259
pub fn start < F > ( & mut self , f : F )
@@ -1385,7 +1381,7 @@ where
1385
1381
stream. disable ( ) ;
1386
1382
1387
1383
// Set the channel
1388
- stream. set_channel ( CHANNEL :: new ( ) ) ;
1384
+ stream. set_channel :: < CHANNEL > ( ) ;
1389
1385
1390
1386
// Set peripheral to memory mode
1391
1387
stream. set_direction ( DIR :: new ( ) ) ;
@@ -1583,7 +1579,8 @@ where
1583
1579
}
1584
1580
}
1585
1581
1586
- impl < STREAM , CHANNEL , PERIPHERAL , DIR , BUF > Drop for Transfer < STREAM , CHANNEL , PERIPHERAL , DIR , BUF >
1582
+ impl < STREAM , PERIPHERAL , DIR , BUF , const CHANNEL : u8 > Drop
1583
+ for Transfer < STREAM , PERIPHERAL , DIR , BUF , CHANNEL >
1587
1584
where
1588
1585
STREAM : Stream ,
1589
1586
PERIPHERAL : PeriAddress ,
0 commit comments