aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelagil <[email protected]>2025-08-25 21:10:59 +0200
committerDario Nieuwenhuis <[email protected]>2025-09-05 14:43:29 +0200
commitbfd82ff82c1a1cc5159fc07997af2ca87622a679 (patch)
treeb58d0add0e64d49192ce80c99bcc74104bcfb7ad
parent1541f1e0c2c3b2f8d5e5764966393eedac95ebf0 (diff)
fix: read transfer options
-rw-r--r--embassy-stm32/src/dma/gpdma/ringbuffered.rs19
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