diff options
| author | Jakob <[email protected]> | 2025-05-14 18:57:49 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-14 18:57:49 +0200 |
| commit | b17da5b79470cb6b9877ec9fd5682062f7a37aec (patch) | |
| tree | 4d60a3e4b9404a8b566b069358d700a6cfb5f8b2 /tests | |
| parent | a71642ca01190d1a8f8bd652bd41d8a9539fe2ee (diff) | |
| parent | b9ed61cdd99be4a58a757a0eb32c1fa77a696d6a (diff) | |
Merge branch 'embassy-rs:main' into update_doc_comment_for_adc_read
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/rp/src/bin/overclock.rs | 69 | ||||
| -rw-r--r-- | tests/rp/src/bin/uart.rs | 6 | ||||
| -rw-r--r-- | tests/rp/src/bin/uart_buffered.rs | 6 | ||||
| -rw-r--r-- | tests/rp/src/bin/uart_dma.rs | 6 | ||||
| -rw-r--r-- | tests/stm32/Cargo.toml | 8 |
5 files changed, 83 insertions, 12 deletions
diff --git a/tests/rp/src/bin/overclock.rs b/tests/rp/src/bin/overclock.rs new file mode 100644 index 000000000..167a26eb2 --- /dev/null +++ b/tests/rp/src/bin/overclock.rs | |||
| @@ -0,0 +1,69 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | #[cfg(feature = "rp2040")] | ||
| 5 | teleprobe_meta::target!(b"rpi-pico"); | ||
| 6 | #[cfg(feature = "rp235xb")] | ||
| 7 | teleprobe_meta::target!(b"pimoroni-pico-plus-2"); | ||
| 8 | |||
| 9 | use defmt::info; | ||
| 10 | use embassy_executor::Spawner; | ||
| 11 | use embassy_rp::clocks::{clk_sys_freq, core_voltage, ClockConfig, CoreVoltage}; | ||
| 12 | use embassy_rp::config::Config; | ||
| 13 | use embassy_time::Instant; | ||
| 14 | use {defmt_rtt as _, panic_probe as _}; | ||
| 15 | |||
| 16 | const COUNT_TO: i64 = 10_000_000; | ||
| 17 | |||
| 18 | #[embassy_executor::main] | ||
| 19 | async fn main(_spawner: Spawner) { | ||
| 20 | let mut config = Config::default(); | ||
| 21 | |||
| 22 | // Initialize with 200MHz clock configuration | ||
| 23 | config.clocks = ClockConfig::system_freq(200_000_000).unwrap(); | ||
| 24 | |||
| 25 | // if we are rp235x, we need to manually set the core voltage. rp2040 should do this automatically | ||
| 26 | #[cfg(feature = "rp235xb")] | ||
| 27 | { | ||
| 28 | config.clocks.core_voltage = CoreVoltage::V1_15; | ||
| 29 | } | ||
| 30 | |||
| 31 | let _p = embassy_rp::init(config); | ||
| 32 | |||
| 33 | // We should be at core voltage of 1.15V | ||
| 34 | assert_eq!(core_voltage().unwrap(), CoreVoltage::V1_15, "Core voltage is not 1.15V"); | ||
| 35 | // We should be at 200MHz | ||
| 36 | assert_eq!(clk_sys_freq(), 200_000_000, "System clock frequency is not 200MHz"); | ||
| 37 | |||
| 38 | // Test the system speed | ||
| 39 | let time_elapsed = { | ||
| 40 | let mut counter = 0; | ||
| 41 | let start = Instant::now(); | ||
| 42 | while counter < COUNT_TO { | ||
| 43 | counter += 1; | ||
| 44 | } | ||
| 45 | let elapsed = Instant::now() - start; | ||
| 46 | |||
| 47 | elapsed.as_millis() | ||
| 48 | }; | ||
| 49 | |||
| 50 | // Tests will fail if unused variables are detected: | ||
| 51 | // Report the elapsed time, so that the compiler doesn't optimize it away for the chip not on test | ||
| 52 | info!( | ||
| 53 | "At {}Mhz: Elapsed time to count to {}: {}ms", | ||
| 54 | clk_sys_freq() / 1_000_000, | ||
| 55 | COUNT_TO, | ||
| 56 | time_elapsed | ||
| 57 | ); | ||
| 58 | |||
| 59 | // Check if the elapsed time is within expected limits | ||
| 60 | // for rp2040 we expect about 600ms | ||
| 61 | #[cfg(feature = "rp2040")] | ||
| 62 | // allow 1% error | ||
| 63 | assert!(time_elapsed < 606, "Elapsed time is too long"); | ||
| 64 | // for rp235x we expect about 450ms | ||
| 65 | #[cfg(feature = "rp235xb")] | ||
| 66 | assert!(time_elapsed < 455, "Elapsed time is too long"); | ||
| 67 | |||
| 68 | cortex_m::asm::bkpt(); | ||
| 69 | } | ||
diff --git a/tests/rp/src/bin/uart.rs b/tests/rp/src/bin/uart.rs index 84744ab77..80230f3fe 100644 --- a/tests/rp/src/bin/uart.rs +++ b/tests/rp/src/bin/uart.rs | |||
| @@ -8,17 +8,17 @@ teleprobe_meta::target!(b"pimoroni-pico-plus-2"); | |||
| 8 | use defmt::{assert_eq, *}; | 8 | use defmt::{assert_eq, *}; |
| 9 | use embassy_executor::Spawner; | 9 | use embassy_executor::Spawner; |
| 10 | use embassy_rp::gpio::{Level, Output}; | 10 | use embassy_rp::gpio::{Level, Output}; |
| 11 | use embassy_rp::uart::{Blocking, Config, Error, Instance, Parity, Uart, UartRx}; | 11 | use embassy_rp::uart::{Blocking, Config, Error, Parity, Uart, UartRx}; |
| 12 | use embassy_time::Timer; | 12 | use embassy_time::Timer; |
| 13 | use {defmt_rtt as _, panic_probe as _}; | 13 | use {defmt_rtt as _, panic_probe as _}; |
| 14 | 14 | ||
| 15 | fn read<const N: usize>(uart: &mut Uart<'_, impl Instance, Blocking>) -> Result<[u8; N], Error> { | 15 | fn read<const N: usize>(uart: &mut Uart<'_, Blocking>) -> Result<[u8; N], Error> { |
| 16 | let mut buf = [255; N]; | 16 | let mut buf = [255; N]; |
| 17 | uart.blocking_read(&mut buf)?; | 17 | uart.blocking_read(&mut buf)?; |
| 18 | Ok(buf) | 18 | Ok(buf) |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | fn read1<const N: usize>(uart: &mut UartRx<'_, impl Instance, Blocking>) -> Result<[u8; N], Error> { | 21 | fn read1<const N: usize>(uart: &mut UartRx<'_, Blocking>) -> Result<[u8; N], Error> { |
| 22 | let mut buf = [255; N]; | 22 | let mut buf = [255; N]; |
| 23 | uart.blocking_read(&mut buf)?; | 23 | uart.blocking_read(&mut buf)?; |
| 24 | Ok(buf) | 24 | Ok(buf) |
diff --git a/tests/rp/src/bin/uart_buffered.rs b/tests/rp/src/bin/uart_buffered.rs index d5f655e9b..cb78fc142 100644 --- a/tests/rp/src/bin/uart_buffered.rs +++ b/tests/rp/src/bin/uart_buffered.rs | |||
| @@ -10,7 +10,7 @@ use embassy_executor::Spawner; | |||
| 10 | use embassy_rp::bind_interrupts; | 10 | use embassy_rp::bind_interrupts; |
| 11 | use embassy_rp::gpio::{Level, Output}; | 11 | use embassy_rp::gpio::{Level, Output}; |
| 12 | use embassy_rp::peripherals::UART0; | 12 | use embassy_rp::peripherals::UART0; |
| 13 | use embassy_rp::uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, Config, Error, Instance, Parity}; | 13 | use embassy_rp::uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, Config, Error, Parity}; |
| 14 | use embassy_time::Timer; | 14 | use embassy_time::Timer; |
| 15 | use embedded_io_async::{Read, ReadExactError, Write}; | 15 | use embedded_io_async::{Read, ReadExactError, Write}; |
| 16 | use {defmt_rtt as _, panic_probe as _}; | 16 | use {defmt_rtt as _, panic_probe as _}; |
| @@ -19,7 +19,7 @@ bind_interrupts!(struct Irqs { | |||
| 19 | UART0_IRQ => BufferedInterruptHandler<UART0>; | 19 | UART0_IRQ => BufferedInterruptHandler<UART0>; |
| 20 | }); | 20 | }); |
| 21 | 21 | ||
| 22 | async fn read<const N: usize>(uart: &mut BufferedUart<'_, impl Instance>) -> Result<[u8; N], Error> { | 22 | async fn read<const N: usize>(uart: &mut BufferedUart) -> Result<[u8; N], Error> { |
| 23 | let mut buf = [255; N]; | 23 | let mut buf = [255; N]; |
| 24 | match uart.read_exact(&mut buf).await { | 24 | match uart.read_exact(&mut buf).await { |
| 25 | Ok(()) => Ok(buf), | 25 | Ok(()) => Ok(buf), |
| @@ -29,7 +29,7 @@ async fn read<const N: usize>(uart: &mut BufferedUart<'_, impl Instance>) -> Res | |||
| 29 | } | 29 | } |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | async fn read1<const N: usize>(uart: &mut BufferedUartRx<'_, impl Instance>) -> Result<[u8; N], Error> { | 32 | async fn read1<const N: usize>(uart: &mut BufferedUartRx) -> Result<[u8; N], Error> { |
| 33 | let mut buf = [255; N]; | 33 | let mut buf = [255; N]; |
| 34 | match uart.read_exact(&mut buf).await { | 34 | match uart.read_exact(&mut buf).await { |
| 35 | Ok(()) => Ok(buf), | 35 | Ok(()) => Ok(buf), |
diff --git a/tests/rp/src/bin/uart_dma.rs b/tests/rp/src/bin/uart_dma.rs index a09101223..a7af81f5f 100644 --- a/tests/rp/src/bin/uart_dma.rs +++ b/tests/rp/src/bin/uart_dma.rs | |||
| @@ -10,7 +10,7 @@ use embassy_executor::Spawner; | |||
| 10 | use embassy_rp::bind_interrupts; | 10 | use embassy_rp::bind_interrupts; |
| 11 | use embassy_rp::gpio::{Level, Output}; | 11 | use embassy_rp::gpio::{Level, Output}; |
| 12 | use embassy_rp::peripherals::UART0; | 12 | use embassy_rp::peripherals::UART0; |
| 13 | use embassy_rp::uart::{Async, Config, Error, Instance, InterruptHandler, Parity, Uart, UartRx}; | 13 | use embassy_rp::uart::{Async, Config, Error, InterruptHandler, Parity, Uart, UartRx}; |
| 14 | use embassy_time::Timer; | 14 | use embassy_time::Timer; |
| 15 | use {defmt_rtt as _, panic_probe as _}; | 15 | use {defmt_rtt as _, panic_probe as _}; |
| 16 | 16 | ||
| @@ -18,13 +18,13 @@ bind_interrupts!(struct Irqs { | |||
| 18 | UART0_IRQ => InterruptHandler<UART0>; | 18 | UART0_IRQ => InterruptHandler<UART0>; |
| 19 | }); | 19 | }); |
| 20 | 20 | ||
| 21 | async fn read<const N: usize>(uart: &mut Uart<'_, impl Instance, Async>) -> Result<[u8; N], Error> { | 21 | async fn read<const N: usize>(uart: &mut Uart<'_, Async>) -> Result<[u8; N], Error> { |
| 22 | let mut buf = [255; N]; | 22 | let mut buf = [255; N]; |
| 23 | uart.read(&mut buf).await?; | 23 | uart.read(&mut buf).await?; |
| 24 | Ok(buf) | 24 | Ok(buf) |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | async fn read1<const N: usize>(uart: &mut UartRx<'_, impl Instance, Async>) -> Result<[u8; N], Error> { | 27 | async fn read1<const N: usize>(uart: &mut UartRx<'_, Async>) -> Result<[u8; N], Error> { |
| 28 | let mut buf = [255; N]; | 28 | let mut buf = [255; N]; |
| 29 | uart.read(&mut buf).await?; | 29 | uart.read(&mut buf).await?; |
| 30 | Ok(buf) | 30 | Ok(buf) |
diff --git a/tests/stm32/Cargo.toml b/tests/stm32/Cargo.toml index a676aee53..3a347e279 100644 --- a/tests/stm32/Cargo.toml +++ b/tests/stm32/Cargo.toml | |||
| @@ -12,7 +12,7 @@ stm32f207zg = ["embassy-stm32/stm32f207zg", "spi-v1", "chrono", "not-gpdma", "et | |||
| 12 | stm32f303ze = ["embassy-stm32/stm32f303ze", "chrono", "not-gpdma"] | 12 | stm32f303ze = ["embassy-stm32/stm32f303ze", "chrono", "not-gpdma"] |
| 13 | stm32f429zi = ["embassy-stm32/stm32f429zi", "spi-v1", "chrono", "eth", "stop", "can", "not-gpdma", "dac", "rng"] | 13 | stm32f429zi = ["embassy-stm32/stm32f429zi", "spi-v1", "chrono", "eth", "stop", "can", "not-gpdma", "dac", "rng"] |
| 14 | stm32f446re = ["embassy-stm32/stm32f446re", "spi-v1", "chrono", "stop", "can", "not-gpdma", "dac", "sdmmc"] | 14 | stm32f446re = ["embassy-stm32/stm32f446re", "spi-v1", "chrono", "stop", "can", "not-gpdma", "dac", "sdmmc"] |
| 15 | stm32f767zi = ["embassy-stm32/stm32f767zi", "chrono", "not-gpdma", "eth", "rng"] | 15 | stm32f767zi = ["embassy-stm32/stm32f767zi", "chrono", "not-gpdma", "eth", "rng", "single-bank"] |
| 16 | stm32g071rb = ["embassy-stm32/stm32g071rb", "cm0", "not-gpdma", "dac", "ucpd"] | 16 | stm32g071rb = ["embassy-stm32/stm32g071rb", "cm0", "not-gpdma", "dac", "ucpd"] |
| 17 | stm32g491re = ["embassy-stm32/stm32g491re", "chrono", "stop", "not-gpdma", "rng", "fdcan", "cordic"] | 17 | stm32g491re = ["embassy-stm32/stm32g491re", "chrono", "stop", "not-gpdma", "rng", "fdcan", "cordic"] |
| 18 | stm32h563zi = ["embassy-stm32/stm32h563zi", "spi-v345", "chrono", "eth", "rng", "fdcan", "hash", "cordic", "stop"] | 18 | stm32h563zi = ["embassy-stm32/stm32h563zi", "spi-v345", "chrono", "eth", "rng", "fdcan", "hash", "cordic", "stop"] |
| @@ -23,8 +23,8 @@ stm32l073rz = ["embassy-stm32/stm32l073rz", "cm0", "not-gpdma", "rng"] | |||
| 23 | stm32l152re = ["embassy-stm32/stm32l152re", "spi-v1", "chrono", "not-gpdma"] | 23 | stm32l152re = ["embassy-stm32/stm32l152re", "spi-v1", "chrono", "not-gpdma"] |
| 24 | stm32l496zg = ["embassy-stm32/stm32l496zg", "not-gpdma", "rng"] | 24 | stm32l496zg = ["embassy-stm32/stm32l496zg", "not-gpdma", "rng"] |
| 25 | stm32l4a6zg = ["embassy-stm32/stm32l4a6zg", "chrono", "not-gpdma", "rng", "hash"] | 25 | stm32l4a6zg = ["embassy-stm32/stm32l4a6zg", "chrono", "not-gpdma", "rng", "hash"] |
| 26 | stm32l4r5zi = ["embassy-stm32/stm32l4r5zi", "chrono", "not-gpdma", "rng"] | 26 | stm32l4r5zi = ["embassy-stm32/stm32l4r5zi", "chrono", "not-gpdma", "rng", "dual-bank"] |
| 27 | stm32l552ze = ["embassy-stm32/stm32l552ze", "not-gpdma", "rng", "hash"] | 27 | stm32l552ze = ["embassy-stm32/stm32l552ze", "not-gpdma", "rng", "hash", "dual-bank"] |
| 28 | stm32u585ai = ["embassy-stm32/stm32u585ai", "spi-v345", "chrono", "rng", "hash", "cordic"] | 28 | stm32u585ai = ["embassy-stm32/stm32u585ai", "spi-v345", "chrono", "rng", "hash", "cordic"] |
| 29 | stm32u5a5zj = ["embassy-stm32/stm32u5a5zj", "spi-v345", "chrono", "rng", "hash"] # FIXME: cordic test cause it crash | 29 | stm32u5a5zj = ["embassy-stm32/stm32u5a5zj", "spi-v345", "chrono", "rng", "hash"] # FIXME: cordic test cause it crash |
| 30 | stm32wb55rg = ["embassy-stm32/stm32wb55rg", "chrono", "not-gpdma", "ble", "mac" , "rng"] | 30 | stm32wb55rg = ["embassy-stm32/stm32wb55rg", "chrono", "not-gpdma", "ble", "mac" , "rng"] |
| @@ -53,6 +53,8 @@ not-gpdma = [] | |||
| 53 | dac = [] | 53 | dac = [] |
| 54 | ucpd = [] | 54 | ucpd = [] |
| 55 | cordic = ["dep:num-traits"] | 55 | cordic = ["dep:num-traits"] |
| 56 | dual-bank = ["embassy-stm32/dual-bank"] | ||
| 57 | single-bank = ["embassy-stm32/single-bank"] | ||
| 56 | 58 | ||
| 57 | cm0 = ["portable-atomic/unsafe-assume-single-core"] | 59 | cm0 = ["portable-atomic/unsafe-assume-single-core"] |
| 58 | 60 | ||
