diff options
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 109b2738b..7fb8da5ac 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -657,28 +657,23 @@ impl<'d> Spi<'d, Async> { | |||
| 657 | }) | 657 | }) |
| 658 | }); | 658 | }); |
| 659 | 659 | ||
| 660 | let tsize = regs.cr2().read().tsize(); | ||
| 661 | |||
| 662 | let rx_src = regs.rx_ptr(); | 660 | let rx_src = regs.rx_ptr(); |
| 663 | 661 | ||
| 664 | let mut read = 0; | 662 | for mut chunk in data.chunks_mut(u16::max_value().into()) { |
| 665 | let mut remaining = data.len(); | ||
| 666 | |||
| 667 | loop { | ||
| 668 | self.set_word_size(W::CONFIG); | 663 | self.set_word_size(W::CONFIG); |
| 669 | set_rxdmaen(regs, true); | 664 | set_rxdmaen(regs, true); |
| 670 | 665 | ||
| 671 | let transfer_size = remaining.min(u16::max_value().into()); | 666 | let tsize = chunk.len(); |
| 672 | 667 | ||
| 673 | let transfer = unsafe { | 668 | let transfer = unsafe { |
| 674 | self.rx_dma | 669 | self.rx_dma |
| 675 | .as_mut() | 670 | .as_mut() |
| 676 | .unwrap() | 671 | .unwrap() |
| 677 | .read(rx_src, &mut data[read..(read + transfer_size)], Default::default()) | 672 | .read(rx_src, &mut chunk, Default::default()) |
| 678 | }; | 673 | }; |
| 679 | 674 | ||
| 680 | regs.cr2().modify(|w| { | 675 | regs.cr2().modify(|w| { |
| 681 | w.set_tsize(transfer_size as u16); | 676 | w.set_tsize(tsize as u16); |
| 682 | }); | 677 | }); |
| 683 | 678 | ||
| 684 | regs.cr1().modify(|w| { | 679 | regs.cr1().modify(|w| { |
| @@ -692,14 +687,6 @@ impl<'d> Spi<'d, Async> { | |||
| 692 | transfer.await; | 687 | transfer.await; |
| 693 | 688 | ||
| 694 | finish_dma(regs); | 689 | finish_dma(regs); |
| 695 | |||
| 696 | remaining -= transfer_size; | ||
| 697 | |||
| 698 | if remaining == 0 { | ||
| 699 | break; | ||
| 700 | } | ||
| 701 | |||
| 702 | read += transfer_size; | ||
| 703 | } | 690 | } |
| 704 | 691 | ||
| 705 | regs.cr1().modify(|w| { | 692 | regs.cr1().modify(|w| { |
| @@ -711,7 +698,7 @@ impl<'d> Spi<'d, Async> { | |||
| 711 | }); | 698 | }); |
| 712 | 699 | ||
| 713 | regs.cr2().modify(|w| { | 700 | regs.cr2().modify(|w| { |
| 714 | w.set_tsize(tsize); | 701 | w.set_tsize(0); |
| 715 | }); | 702 | }); |
| 716 | 703 | ||
| 717 | #[cfg(spi_v3)] | 704 | #[cfg(spi_v3)] |
