Skip to content

Commit 5ebfc36

Browse files
authored
Fix DMA->DMAMUX channel mapping (#200)
1 parent d4ba734 commit 5ebfc36

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

Cargo.toml

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ version = "0.0.2"
1313

1414
[dependencies]
1515
nb = "1"
16-
stm32g4 = { version = "0.22.0", package = "stm32g4-staging" }
16+
stm32g4 = { version = "0.22.0", package = "stm32g4-staging", features = ["defmt"] }
1717
paste = "1.0"
1818
fugit = "0.3.7"
1919
stm32-usbd = { version = "0.7.0", optional = true }
@@ -75,16 +75,17 @@ usbd-serial = "0.2.2"
7575
#TODO: Separate feature sets
7676
[features]
7777
default = ["rt"]
78+
7879
rt = ["stm32g4/rt"]
7980
usb = ["dep:stm32-usbd"]
80-
stm32g431 = ["stm32g4/stm32g431"]
81-
stm32g441 = ["stm32g4/stm32g441"]
82-
stm32g473 = ["stm32g4/stm32g473", "adc3", "adc4", "adc5"]
83-
stm32g474 = ["stm32g4/stm32g474", "adc3", "adc4", "adc5"]
84-
stm32g483 = ["stm32g4/stm32g483", "adc3", "adc4", "adc5"]
85-
stm32g484 = ["stm32g4/stm32g484", "adc3", "adc4", "adc5"]
86-
stm32g491 = ["stm32g4/stm32g491", "adc3"]
87-
stm32g4a1 = ["stm32g4/stm32g4a1", "adc3"]
81+
stm32g431 = ["stm32g4/stm32g431", "cat2"]
82+
stm32g441 = ["stm32g4/stm32g441", "cat2"]
83+
stm32g473 = ["stm32g4/stm32g473", "cat3", "adc3", "adc4", "adc5"]
84+
stm32g474 = ["stm32g4/stm32g474", "cat3", "adc3", "adc4", "adc5"]
85+
stm32g483 = ["stm32g4/stm32g483", "cat3", "adc3", "adc4", "adc5"]
86+
stm32g484 = ["stm32g4/stm32g484", "cat3", "adc3", "adc4", "adc5"]
87+
stm32g491 = ["stm32g4/stm32g491", "cat4", "adc3"]
88+
stm32g4a1 = ["stm32g4/stm32g4a1", "cat4", "adc3"]
8889
log-itm = ["cortex-m-log/itm"]
8990
log-rtt = []
9091
log-semihost = ["cortex-m-log/semihosting"]
@@ -99,6 +100,12 @@ cordic = ["dep:fixed"]
99100
adc3 = []
100101
adc4 = []
101102
adc5 = []
103+
104+
# Device category
105+
cat2 = []
106+
cat3 = []
107+
cat4 = []
108+
102109
can = ["dep:fdcan"]
103110

104111
[profile.dev]

src/dma/channel.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,22 @@ impl<I: Instance, const N: u8> Channel for C<I, N> {
263263
fn set_request_line(&mut self, request_line: u8) {
264264
//NOTE(unsafe) We only access the registers that belongs to the ChannelX
265265
let dmamux = unsafe { &*I::mux_ptr() };
266+
#[cfg(feature = "cat2")]
267+
let channels_per_dma = 6;
268+
269+
#[cfg(any(feature = "cat3", feature = "cat4"))]
270+
let channels_per_dma = 8;
271+
272+
let mux_ch = if I::IS_DMA1 {
273+
// DMA1 ch 0..=(channels_per_dma-1) are dmamux ch 0..=channels_per_dma
274+
N as usize
275+
} else {
276+
// DMA2 ch 0..=ch(channels_per_dma-1) are dmamux ch channels_per_dma..=(2*channels_per_dma-1)
277+
N as usize + channels_per_dma
278+
};
266279
unsafe {
267280
dmamux
268-
.ccr(N as usize)
281+
.ccr(mux_ch)
269282
.modify(|_, w| w.dmareq_id().bits(request_line));
270283
}
271284
}

0 commit comments

Comments
 (0)