185 Commits

Author SHA1 Message Date
noracarmig
72020fc012 Reset complete count global variable on Dma configure 2025-01-26 14:53:10 +00:00
Dario Nieuwenhuis
eda51673f5
Merge pull request #3704 from CNLHC/pwm_support_gp32
feat: Add 32-bit timer support for waveform function
2025-01-21 22:57:47 +00:00
Liu Hancheng
4ad3b66e45 refactor: update write DMA transfer function to use separate memory word type 2025-01-05 10:25:10 +08:00
Liu Hancheng
50e98a9a58 refactor: update DMA transfer functions to support separate memory and peripheral word types 2025-01-04 22:10:47 +08:00
Liu Hancheng
ff526e1604 refactor: update DMA transfer functions to use separate memory and peripheral sizes 2025-01-04 20:16:34 +08:00
elagil
eba8089601 chore: fix build 2025-01-03 18:18:00 +01:00
elagil
5d2b38c979 doc: improve comment 2024-11-28 17:45:00 +01:00
elagil
152d8ee0d9 fix: make write_immediate() for ring buffers right-aligned 2024-11-28 17:39:39 +01:00
elagil
ee9ca44703 refactor: naming of wait functions 2024-11-17 23:56:45 +01:00
elagil
7ae2816341 feat: SAI/ringbuffer add function to wait for any write error 2024-11-17 23:10:11 +01:00
elagil
d592875ca6 fix(SAI): disallow start without initial write 2024-11-16 15:02:32 +01:00
dvdsk
edac7cc630
stm32/uart remove DmaUnsynced from public api
Its an internal error which should never be exposed. It should only
occur with wrong driver implementations. We log to the user and return
an Overrun error since handling DmaUnsynced as an Overrun will resolve it.
2024-10-26 12:38:10 +02:00
Alexandros Liarokapis
28d03537e9 stm32: Automatically clear on WritableRingBuffer start 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
d280b23428 fix adc/ringbuffered_v2.rs 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
2ec05da5dd simplify if/else handling on ringbuffer 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
f0d2ebdc7e stm32: fix ringbugger overrun errors due to bad dma wrap-around behavior 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
9c7b296432 overrun at invalid diffs, rename clear to reset, simplify dma_sync method 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
8271225216 make len method take mut self and remove sync index calls 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
85fb890b00 add auto-clear functionality to ringbuffer 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
f4ec0cb4d4 simplify and rename ringbuffer methods, make len available 2024-10-15 12:29:12 +03:00
Alexandros Liarokapis
2b10caafd4 stm32: initial support for alternative ringbuffer implementation 2024-10-15 12:29:12 +03:00
Dario Nieuwenhuis
59dcffbc60 stm32/gpdma: clear tr3 just in case. 2024-09-23 02:06:58 +02:00
Dario Nieuwenhuis
f2f96a731c stm32/gpdma: ensure bndt in bytes doesn't overflow. 2024-09-23 02:06:58 +02:00
Peter Krull
2a9cdaabaa stm32: Moved comment to match request_stop 2024-09-19 18:25:08 +02:00
Peter Krull
907d55ea82 stm32: Added request_pause to DMA, and use it for RingBufferedUartRx 2024-09-19 18:14:09 +02:00
Badr Bouslikhin
0e477a4df5
fix(stm32): enable dma half transfer interrupt for buffereduart 2024-09-06 18:55:33 +02:00
Alexandros Liarokapis
2b7e76efe9 Fix dma nvic issues on dual core lines
This commit addresses #3256 by disabling dma NVIC interrupt enablement at startup.
Instead, per-channel NVIC interrupt enablement is now done with the rest of the dma channel configuration.
This ensures that each core will only handle the interrupts of the DMA channels that it uses.
2024-08-17 16:54:41 +03:00
Alexandros Liarokapis
00ff1409cd Enables half transfer ir when constructing a ReadableDmaRingBuffer
The half transfer irq needs to be enabled in order for the hardware to
notify the waker when the transfer is at half. This is needed to ensure
no overuns occur when using `ReadableDmaRingBuffer`'s `read_exact`.
Otherwise we are only notified when the DMA has completed its cycle and
is on its way to start overwriting the data. The docs in the dma_bdma
buf module also seem to imply that the half transfer irq must be enabled for
proper operation. The only consumers of the `ReadableDmaRingBuffer` api
are the sai module and the `RingBufferedUartRx`. The former enables the
irq manually when constructing the transfer options while the
latter does not. This may also be the cause for #1441.
2024-06-23 11:43:50 +03:00
Dario Nieuwenhuis
7ad76f5f60 Use raw slices .len() method instead of unsafe hacks.
Stabilized in 1.79.
2024-06-13 20:41:08 +02:00
Alexandros Liarokapis
f9324201b1 add proper rxonly support for spi_v3 and force tx dma stream requirement on others 2024-05-27 17:49:47 +03:00
Dario Nieuwenhuis
1ed2a0504a stm32/dma: add support for same channel with different req in different DMAs/DMAMUXes. 2024-04-29 23:56:15 +02:00
Dario Nieuwenhuis
6f44d7a9df stm32: update metapac. Adds U5 LPDMA, fixes ADC_COMMONs. 2024-04-29 20:52:27 +02:00
Dario Nieuwenhuis
02da66aec8 stm32/dma: add ChannelAndRequest helper. 2024-04-15 21:52:40 +02:00
Tyler Gilbert
cb01d03835 Add async stop() function to stm32 bdma_dma 2024-03-31 16:31:47 -05:00
Dario Nieuwenhuis
2bca875b5f stm32: use private_bounds for sealed traits. 2024-03-23 01:38:51 +01:00
Dario Nieuwenhuis
eca9aac194 Fix warnings in recent nightly. 2024-03-20 16:39:09 +01:00
Caleb Garrett
50a7ada0bb Fixed DMA CI build issues. 2024-03-10 17:28:53 -04:00
Caleb Garrett
e92094986d Add DMA request priority as transfer option. 2024-03-10 16:53:37 -04:00
Timo Kröger
bbc06458a3 stm32: Implement Channel trait for AnyChannel 2024-03-07 15:05:28 +01:00
Dario Nieuwenhuis
e67dfcb04f stm32/dma: add AnyChannel, add support for BDMA on H7. 2024-02-24 02:41:41 +01:00
Dario Nieuwenhuis
e8474426d8 hal-internal: remove impl DerefMut for PeripheralRef.
if you have `PeripheralRef<'a, AnyPIn>` for pin A, and `AnyPin` (owned) for pin B, you can `mem::swap` them.
so, getting access forever to pin A, just by "sacrificing" pin B

this defeats the point of PeripheralRef, which is if you got a `PeripheralRef<'a, T>` then you're only allowed to use the peripheral for `'a`.

Also some drivers rely on the fact only one instance of a singleton exists for soundness, so this is a soundness fix for those.
2024-02-20 01:02:15 +01:00
eZio Pan
d6636ca116 minor fix 2024-02-09 23:57:09 +01:00
Tyler Gilbert
994b77e684 Add write_immediate() function to STM32 DMA ringbuffer API to pre-fill the buffer before starting the DMA 2024-01-03 11:06:03 -06:00
eZio Pan
745d618ab7 note on circular mode DMA 2023-12-21 17:03:10 +08:00
Dario Nieuwenhuis
c8c8b89104 stm32: doc everything else. 2023-12-19 18:03:20 +01:00
eZio Pan
254d587385 match up with metapac change 2023-12-19 17:12:34 +08:00
Dario Nieuwenhuis
124478c5e9 stm32: more docs. 2023-12-18 19:11:23 +01:00
Dario Nieuwenhuis
80c9d04bbd stm32: add some docs. 2023-12-18 00:53:18 +01:00
Torin Cooper-Bennun
8eff749823 stm32/gpdma: fix drop() to use RM's method for aborting transfer
see e.g. STM32H503 RM section 15.4.4...

1. Write 1 into GPDMA_CxCR.SUSP
2. Poll GPDMA_CxSR.SUSPF until it is 1
3. Write 1 into GPDMA_CxCR.RESET (occurs upon next init, in new_inner())
2023-11-13 16:41:09 +00:00
Dario Nieuwenhuis
97ca0e77bf stm32: avoid creating many tiny critical sections in init.
Saves 292 bytes on stm32f0 bilnky with max optimizations (from 3132 to 2840).
2023-10-12 16:20:34 +02:00