diff options
| author | elagil <[email protected]> | 2025-08-25 21:10:59 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2025-09-05 14:43:29 +0200 |
| commit | bfd82ff82c1a1cc5159fc07997af2ca87622a679 (patch) | |
| tree | b58d0add0e64d49192ce80c99bcc74104bcfb7ad /embassy-stm32/src | |
| parent | 1541f1e0c2c3b2f8d5e5764966393eedac95ebf0 (diff) | |
fix: read transfer options
Diffstat (limited to 'embassy-stm32/src')
| -rw-r--r-- | embassy-stm32/src/dma/gpdma/ringbuffered.rs | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/embassy-stm32/src/dma/gpdma/ringbuffered.rs b/embassy-stm32/src/dma/gpdma/ringbuffered.rs index 9bee12d99..c49c6c73d 100644 --- a/embassy-stm32/src/dma/gpdma/ringbuffered.rs +++ b/embassy-stm32/src/dma/gpdma/ringbuffered.rs | |||
| @@ -76,7 +76,7 @@ impl<'a, W: Word> ReadableRingBuffer<'a, W> { | |||
| 76 | request: Request, | 76 | request: Request, |
| 77 | peri_addr: *mut W, | 77 | peri_addr: *mut W, |
| 78 | buffer: &'a mut [W], | 78 | buffer: &'a mut [W], |
| 79 | mut options: TransferOptions, | 79 | _options: TransferOptions, |
| 80 | ) -> Self { | 80 | ) -> Self { |
| 81 | into_ref!(channel); | 81 | into_ref!(channel); |
| 82 | let channel: PeripheralRef<'a, AnyChannel> = channel.map_into(); | 82 | let channel: PeripheralRef<'a, AnyChannel> = channel.map_into(); |
| @@ -84,31 +84,26 @@ impl<'a, W: Word> ReadableRingBuffer<'a, W> { | |||
| 84 | let half_len = buffer.len() / 2; | 84 | let half_len = buffer.len() / 2; |
| 85 | assert_eq!(half_len * 2, buffer.len()); | 85 | assert_eq!(half_len * 2, buffer.len()); |
| 86 | 86 | ||
| 87 | options.half_transfer_ir = false; | ||
| 88 | options.complete_transfer_ir = true; | ||
| 89 | |||
| 90 | let items = [ | 87 | let items = [ |
| 91 | LinearItem::new_read(request, peri_addr, &mut buffer[..half_len], options), | 88 | LinearItem::new_read(request, peri_addr, &mut buffer[..half_len]), |
| 92 | LinearItem::new_read(request, peri_addr, &mut buffer[half_len..], options), | 89 | LinearItem::new_read(request, peri_addr, &mut buffer[half_len..]), |
| 93 | ]; | 90 | ]; |
| 94 | let table = Table::new(items); | 91 | let table = Table::new(items); |
| 95 | 92 | ||
| 96 | let this = Self { | 93 | Self { |
| 97 | channel, | 94 | channel, |
| 98 | ringbuf: ReadableDmaRingBuffer::new(buffer), | 95 | ringbuf: ReadableDmaRingBuffer::new(buffer), |
| 99 | table, | 96 | table, |
| 100 | user_buffer_half: BufferHalf::First, | 97 | user_buffer_half: BufferHalf::First, |
| 101 | }; | 98 | } |
| 102 | |||
| 103 | this.channel.configure_linked_list(&this.table, options); | ||
| 104 | |||
| 105 | this | ||
| 106 | } | 99 | } |
| 107 | 100 | ||
| 108 | /// Start the ring buffer operation. | 101 | /// Start the ring buffer operation. |
| 109 | /// | 102 | /// |
| 110 | /// You must call this after creating it for it to work. | 103 | /// You must call this after creating it for it to work. |
| 111 | pub fn start(&mut self) { | 104 | pub fn start(&mut self) { |
| 105 | unsafe { self.channel.configure_linked_list(&self.table, Default::default()) }; | ||
| 106 | self.table.link(RunMode::Repeat); | ||
| 112 | self.channel.start(); | 107 | self.channel.start(); |
| 113 | } | 108 | } |
| 114 | 109 | ||
