aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-05-31 21:43:03 +0200
committerDario Nieuwenhuis <[email protected]>2024-05-31 21:54:42 +0200
commitda197b60165b74d05c3d12b046b5cfda0b9cb126 (patch)
tree1b442cb56a9a2de59a661db72a18def1138835b5 /tests
parent999a2ad829d05b2a34797cf43d625d09bd796a58 (diff)
stm32/spi: fix spiv1 rxonly hanging.
Diffstat (limited to 'tests')
-rw-r--r--tests/stm32/build.rs1
-rw-r--r--tests/stm32/src/bin/spi_dma.rs101
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;
6use common::*; 6use common::*;
7use defmt::assert_eq; 7use defmt::assert_eq;
8use embassy_executor::Spawner; 8use embassy_executor::Spawner;
9use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::spi::{self, Spi}; 10use embassy_stm32::spi::{self, Spi};
10use embassy_stm32::time::Hertz; 11use embassy_stm32::time::Hertz;
11use embassy_stm32::{into_ref, Peripheral as _};
12 12
13#[embassy_executor::main] 13#[embassy_executor::main]
14async fn main(_spawner: Spawner) { 14async 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();