aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
authorxoviat <[email protected]>2025-12-05 15:42:43 +0000
committerGitHub <[email protected]>2025-12-05 15:42:43 +0000
commita382238225ea55ee478bbde9ddb7d0d37cf004b5 (patch)
treec9e3d872c1c7cb04a1879ba6a1f1116ee14a5d24 /embassy-stm32
parent4053e5233fab875c4607cd2fed7a7cf5659ce3e1 (diff)
parent40d00d1208c1d0ea2c9a29ea30412b0491fd0543 (diff)
Merge pull request #4981 from Dectron-AB/restart-dma-transfer
GPDMA suspend channel before reset if already enabled
Diffstat (limited to 'embassy-stm32')
-rw-r--r--embassy-stm32/CHANGELOG.md1
-rw-r--r--embassy-stm32/src/dma/gpdma/mod.rs5
2 files changed, 6 insertions, 0 deletions
diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md
index 2b9e0a89a..ac228141e 100644
--- a/embassy-stm32/CHANGELOG.md
+++ b/embassy-stm32/CHANGELOG.md
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7 7
8## Unreleased - ReleaseDate 8## Unreleased - ReleaseDate
9 9
10- fix: stm32: GPDMA driver reset ignored during channel configuration
10- fix: stm32: SPI driver SSOE and SSM manegment, add `nss_output_disable` to SPI Config 11- fix: stm32: SPI driver SSOE and SSM manegment, add `nss_output_disable` to SPI Config
11- change: stm32: use typelevel timer type to allow dma for 32 bit timers 12- change: stm32: use typelevel timer type to allow dma for 32 bit timers
12- fix: fix incorrect handling of split interrupts in timer driver 13- fix: fix incorrect handling of split interrupts in timer driver
diff --git a/embassy-stm32/src/dma/gpdma/mod.rs b/embassy-stm32/src/dma/gpdma/mod.rs
index bfd0570f8..51c107cb4 100644
--- a/embassy-stm32/src/dma/gpdma/mod.rs
+++ b/embassy-stm32/src/dma/gpdma/mod.rs
@@ -238,6 +238,11 @@ impl AnyChannel {
238 // "Preceding reads and writes cannot be moved past subsequent writes." 238 // "Preceding reads and writes cannot be moved past subsequent writes."
239 fence(Ordering::SeqCst); 239 fence(Ordering::SeqCst);
240 240
241 if ch.cr().read().en() {
242 ch.cr().modify(|w| w.set_susp(true));
243 while !ch.sr().read().suspf() {}
244 }
245
241 ch.cr().write(|w| w.set_reset(true)); 246 ch.cr().write(|w| w.set_reset(true));
242 ch.fcr().write(|w| { 247 ch.fcr().write(|w| {
243 // Clear all irqs 248 // Clear all irqs