aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandros Liarokapis <[email protected]>2024-05-28 15:24:05 +0300
committerAlexandros Liarokapis <[email protected]>2024-05-28 16:08:36 +0300
commit4f76f6b9df72c10f039911d0e35ca504be750564 (patch)
tree53cc74fac130aee6219e7bd16e2f0ecd87bd59e6
parent4d1fbcd9cd42ebc3169008e189fcd98dce1c427d (diff)
add spi_dma rx-only test
-rw-r--r--tests/stm32/src/bin/spi_dma.rs65
1 files changed, 60 insertions, 5 deletions
diff --git a/tests/stm32/src/bin/spi_dma.rs b/tests/stm32/src/bin/spi_dma.rs
index 5d46726dd..30e679f2a 100644
--- a/tests/stm32/src/bin/spi_dma.rs
+++ b/tests/stm32/src/bin/spi_dma.rs
@@ -8,27 +8,33 @@ use defmt::assert_eq;
8use embassy_executor::Spawner; 8use embassy_executor::Spawner;
9use embassy_stm32::spi::{self, Spi}; 9use embassy_stm32::spi::{self, Spi};
10use embassy_stm32::time::Hertz; 10use embassy_stm32::time::Hertz;
11use embassy_stm32::{into_ref, Peripheral as _};
11 12
12#[embassy_executor::main] 13#[embassy_executor::main]
13async fn main(_spawner: Spawner) { 14async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(config()); 15 let p = embassy_stm32::init(config());
15 info!("Hello World!"); 16 info!("Hello World!");
16 17
17 let spi = peri!(p, SPI); 18 let spi_peri = peri!(p, SPI);
18 let sck = peri!(p, SPI_SCK); 19 let sck = peri!(p, SPI_SCK);
19 let mosi = peri!(p, SPI_MOSI); 20 let mosi = peri!(p, SPI_MOSI);
20 let miso = peri!(p, SPI_MISO); 21 let miso = peri!(p, SPI_MISO);
21 let tx_dma = peri!(p, SPI_TX_DMA); 22 let tx_dma = peri!(p, SPI_TX_DMA);
22 let rx_dma = peri!(p, SPI_RX_DMA); 23 let rx_dma = peri!(p, SPI_RX_DMA);
23 24
25 into_ref!(spi_peri, sck, mosi, miso, tx_dma, rx_dma);
26
24 let mut spi_config = spi::Config::default(); 27 let mut spi_config = spi::Config::default();
25 spi_config.frequency = Hertz(1_000_000); 28 spi_config.frequency = Hertz(1_000_000);
26 29
27 let mut spi = Spi::new( 30 let mut spi = Spi::new(
28 spi, sck, // Arduino D13 31 spi_peri.reborrow(),
29 mosi, // Arduino D11 32 sck.reborrow(), // Arduino D13
30 miso, // Arduino D12 33 mosi.reborrow(), // Arduino D11
31 tx_dma, rx_dma, spi_config, 34 miso.reborrow(), // Arduino D12
35 tx_dma.reborrow(),
36 rx_dma.reborrow(),
37 spi_config,
32 ); 38 );
33 39
34 let data: [u8; 9] = [0x00, 0xFF, 0xAA, 0x55, 0xC0, 0xFF, 0xEE, 0xC0, 0xDE]; 40 let data: [u8; 9] = [0x00, 0xFF, 0xAA, 0x55, 0xC0, 0xFF, 0xEE, 0xC0, 0xDE];
@@ -76,6 +82,55 @@ async fn main(_spawner: Spawner) {
76 spi.blocking_read(&mut buf).unwrap(); 82 spi.blocking_read(&mut buf).unwrap();
77 spi.write(&buf).await.unwrap(); 83 spi.write(&buf).await.unwrap();
78 84
85 core::mem::drop(spi);
86
87 // test rx-only configuration
88
89 // stm32f207zg - spi_v1
90 // stm32f103c8 - spi_f1
91 // stm32g491re - spi_v2
92 // stm32h753zi - spi_v3
93 // stm32h563zi - spi_v4
94 // stm32wba52cg - spi_v5
95
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
79 info!("Test OK"); 134 info!("Test OK");
80 cortex_m::asm::bkpt(); 135 cortex_m::asm::bkpt();
81} 136}