diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-05-31 21:43:03 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2024-05-31 21:54:42 +0200 |
| commit | da197b60165b74d05c3d12b046b5cfda0b9cb126 (patch) | |
| tree | 1b442cb56a9a2de59a661db72a18def1138835b5 /tests/stm32 | |
| parent | 999a2ad829d05b2a34797cf43d625d09bd796a58 (diff) | |
stm32/spi: fix spiv1 rxonly hanging.
Diffstat (limited to 'tests/stm32')
| -rw-r--r-- | tests/stm32/build.rs | 1 | ||||
| -rw-r--r-- | tests/stm32/src/bin/spi_dma.rs | 101 |
2 files changed, 43 insertions, 59 deletions
diff --git a/tests/stm32/build.rs b/tests/stm32/build.rs index 176adff62..675115568 100644 --- a/tests/stm32/build.rs +++ b/tests/stm32/build.rs | |||
| @@ -14,6 +14,7 @@ fn main() -> Result<(), Box<dyn Error>> { | |||
| 14 | feature = "stm32c031c6", | 14 | feature = "stm32c031c6", |
| 15 | feature = "stm32wb55rg", | 15 | feature = "stm32wb55rg", |
| 16 | feature = "stm32l073rz", | 16 | feature = "stm32l073rz", |
| 17 | feature = "stm32h503rb", | ||
| 17 | // wrong ram size in stm32-data | 18 | // wrong ram size in stm32-data |
| 18 | feature = "stm32wl55jc", | 19 | feature = "stm32wl55jc", |
| 19 | feature = "stm32u5a5zj", | 20 | feature = "stm32u5a5zj", |
diff --git a/tests/stm32/src/bin/spi_dma.rs b/tests/stm32/src/bin/spi_dma.rs index 30e679f2a..92f741af5 100644 --- a/tests/stm32/src/bin/spi_dma.rs +++ b/tests/stm32/src/bin/spi_dma.rs | |||
| @@ -6,34 +6,32 @@ mod common; | |||
| 6 | use common::*; | 6 | use common::*; |
| 7 | use defmt::assert_eq; | 7 | use defmt::assert_eq; |
| 8 | use embassy_executor::Spawner; | 8 | use embassy_executor::Spawner; |
| 9 | use embassy_stm32::gpio::{Level, Output, Speed}; | ||
| 9 | use embassy_stm32::spi::{self, Spi}; | 10 | use embassy_stm32::spi::{self, Spi}; |
| 10 | use embassy_stm32::time::Hertz; | 11 | use embassy_stm32::time::Hertz; |
| 11 | use embassy_stm32::{into_ref, Peripheral as _}; | ||
| 12 | 12 | ||
| 13 | #[embassy_executor::main] | 13 | #[embassy_executor::main] |
| 14 | async fn main(_spawner: Spawner) { | 14 | async fn main(_spawner: Spawner) { |
| 15 | let p = embassy_stm32::init(config()); | 15 | let p = embassy_stm32::init(config()); |
| 16 | info!("Hello World!"); | 16 | info!("Hello World!"); |
| 17 | 17 | ||
| 18 | let spi_peri = peri!(p, SPI); | 18 | let mut spi_peri = peri!(p, SPI); |
| 19 | let sck = peri!(p, SPI_SCK); | 19 | let mut sck = peri!(p, SPI_SCK); |
| 20 | let mosi = peri!(p, SPI_MOSI); | 20 | let mut mosi = peri!(p, SPI_MOSI); |
| 21 | let miso = peri!(p, SPI_MISO); | 21 | let mut miso = peri!(p, SPI_MISO); |
| 22 | let tx_dma = peri!(p, SPI_TX_DMA); | 22 | let mut tx_dma = peri!(p, SPI_TX_DMA); |
| 23 | let rx_dma = peri!(p, SPI_RX_DMA); | 23 | let mut rx_dma = peri!(p, SPI_RX_DMA); |
| 24 | |||
| 25 | into_ref!(spi_peri, sck, mosi, miso, tx_dma, rx_dma); | ||
| 26 | 24 | ||
| 27 | let mut spi_config = spi::Config::default(); | 25 | let mut spi_config = spi::Config::default(); |
| 28 | spi_config.frequency = Hertz(1_000_000); | 26 | spi_config.frequency = Hertz(1_000_000); |
| 29 | 27 | ||
| 30 | let mut spi = Spi::new( | 28 | let mut spi = Spi::new( |
| 31 | spi_peri.reborrow(), | 29 | &mut spi_peri, |
| 32 | sck.reborrow(), // Arduino D13 | 30 | &mut sck, // Arduino D13 |
| 33 | mosi.reborrow(), // Arduino D11 | 31 | &mut mosi, // Arduino D11 |
| 34 | miso.reborrow(), // Arduino D12 | 32 | &mut miso, // Arduino D12 |
| 35 | tx_dma.reborrow(), | 33 | &mut tx_dma, |
| 36 | rx_dma.reborrow(), | 34 | &mut rx_dma, |
| 37 | spi_config, | 35 | spi_config, |
| 38 | ); | 36 | ); |
| 39 | 37 | ||
| @@ -85,51 +83,36 @@ async fn main(_spawner: Spawner) { | |||
| 85 | core::mem::drop(spi); | 83 | core::mem::drop(spi); |
| 86 | 84 | ||
| 87 | // test rx-only configuration | 85 | // test rx-only configuration |
| 86 | let mut spi = Spi::new_rxonly( | ||
| 87 | &mut spi_peri, | ||
| 88 | &mut sck, | ||
| 89 | &mut miso, | ||
| 90 | // SPIv1/f1 requires txdma even if rxonly. | ||
| 91 | #[cfg(not(any( | ||
| 92 | feature = "stm32h503rb", | ||
| 93 | feature = "stm32h563zi", | ||
| 94 | feature = "stm32h753zi", | ||
| 95 | feature = "stm32h755zi", | ||
| 96 | feature = "stm32h7a3zi", | ||
| 97 | feature = "stm32h7s3l8", | ||
| 98 | feature = "stm32u585ai", | ||
| 99 | feature = "stm32u5a5zj", | ||
| 100 | feature = "stm32wba52cg", | ||
| 101 | )))] | ||
| 102 | &mut tx_dma, | ||
| 103 | &mut rx_dma, | ||
| 104 | spi_config, | ||
| 105 | ); | ||
| 106 | |||
| 107 | let mut mosi = Output::new(&mut mosi, Level::Low, Speed::VeryHigh); | ||
| 88 | 108 | ||
| 89 | // stm32f207zg - spi_v1 | 109 | mosi.set_high(); |
| 90 | // stm32f103c8 - spi_f1 | 110 | spi.read(&mut buf).await.unwrap(); |
| 91 | // stm32g491re - spi_v2 | 111 | assert_eq!(buf, [0xff; 9]); |
| 92 | // stm32h753zi - spi_v3 | 112 | |
| 93 | // stm32h563zi - spi_v4 | 113 | mosi.set_low(); |
| 94 | // stm32wba52cg - spi_v5 | 114 | spi.read(&mut buf).await.unwrap(); |
| 95 | 115 | assert_eq!(buf, [0x00; 9]); | |
| 96 | #[cfg(any(stm32f207zg, stm32f103c8, stm32g491re, stm32h753zi, stm32h563zi, stm32wba52cg))] | ||
| 97 | { | ||
| 98 | let mut spi = { | ||
| 99 | #[cfg(stm32f207zg, stm32f103c8, stm32g491re)] | ||
| 100 | { | ||
| 101 | Spi::new_rxonly( | ||
| 102 | spi_peri.reborrow(), | ||
| 103 | sck.reborrow(), | ||
| 104 | miso.reborrow(), | ||
| 105 | tx_dma.reborrow(), | ||
| 106 | rx_dma.reborrow(), | ||
| 107 | spi_config, | ||
| 108 | ) | ||
| 109 | } | ||
| 110 | #[cfg(stm32h753zi, stm32h563zi, stm32wba52cg)] | ||
| 111 | { | ||
| 112 | Spi::new_rxonly( | ||
| 113 | spi_peri.reborrow(), | ||
| 114 | sck.reborrow(), | ||
| 115 | miso.reborrow(), | ||
| 116 | rx_dma.reborrow(), | ||
| 117 | spi_config, | ||
| 118 | ) | ||
| 119 | } | ||
| 120 | }; | ||
| 121 | |||
| 122 | use embassy_stm32::gpio; | ||
| 123 | let mut mosi = gpio::Output::new(mosi.reborrow(), gpio::Level::Low, gpio::Speed::Low); | ||
| 124 | |||
| 125 | mosi.set_high(); | ||
| 126 | spi.read(&mut buf).await.unwrap(); | ||
| 127 | assert_eq!(buf, [0xff; 9]); | ||
| 128 | |||
| 129 | mosi.set_low(); | ||
| 130 | spi.read(&mut buf).await.unwrap(); | ||
| 131 | assert_eq!(buf, [0x00; 9]); | ||
| 132 | }; | ||
| 133 | 116 | ||
| 134 | info!("Test OK"); | 117 | info!("Test OK"); |
| 135 | cortex_m::asm::bkpt(); | 118 | cortex_m::asm::bkpt(); |
