diff options
| -rw-r--r-- | tests/rp/src/bin/overclock.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/rp/src/bin/overclock.rs b/tests/rp/src/bin/overclock.rs new file mode 100644 index 000000000..c7b9180a0 --- /dev/null +++ b/tests/rp/src/bin/overclock.rs | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | #[cfg(feature = "rp2040")] | ||
| 4 | teleprobe_meta::target!(b"rpi-pico"); | ||
| 5 | |||
| 6 | use defmt::{assert, assert_eq, info}; | ||
| 7 | use embassy_executor::Spawner; | ||
| 8 | use embassy_rp::config::Config; | ||
| 9 | use embassy_rp::gpio::{Input, Pull}; | ||
| 10 | use embassy_rp::pwm::{Config as PwmConfig, Pwm}; | ||
| 11 | use embassy_time::{Instant, Timer}; | ||
| 12 | use {defmt_rtt as _, panic_probe as _}; | ||
| 13 | |||
| 14 | #[cfg(feature = "rp2040")] | ||
| 15 | #[embassy_executor::main] | ||
| 16 | async fn main(_spawner: Spawner) { | ||
| 17 | // Initialize with 200MHz clock configuration for RP2040 | ||
| 18 | let mut config = Config::default(); | ||
| 19 | config.clocks = embassy_rp::clocks::ClockConfig::at_sys_frequency_mhz(200); | ||
| 20 | |||
| 21 | let p = embassy_rp::init(config); | ||
| 22 | |||
| 23 | info!("RP2040 overclocked to 200MHz!"); | ||
| 24 | info!("System clock frequency: {} Hz", embassy_rp::clocks::clk_sys_freq()); | ||
| 25 | |||
| 26 | // Test 1: Timer accuracy at 200MHz | ||
| 27 | info!("Testing timer accuracy at 200MHz..."); | ||
| 28 | let start = Instant::now(); | ||
| 29 | Timer::after_millis(100).await; | ||
| 30 | let end = Instant::now(); | ||
| 31 | let ms = (end - start).as_millis(); | ||
| 32 | info!("slept for {} ms", ms); | ||
| 33 | assert!(ms >= 99); | ||
| 34 | assert!(ms < 110); | ||
| 35 | info!("Timer test passed!"); | ||
| 36 | |||
| 37 | // Test 2: PWM functionality at 200MHz | ||
| 38 | info!("Testing PWM functionality at 200MHz..."); | ||
| 39 | let pwm_cfg = { | ||
| 40 | let mut c = PwmConfig::default(); | ||
| 41 | c.divider = ((embassy_rp::clocks::clk_sys_freq() / 1_000_000) as u8).into(); | ||
| 42 | c.top = 10000; | ||
| 43 | c.compare_a = 5000; | ||
| 44 | c.compare_b = 5000; | ||
| 45 | c | ||
| 46 | }; | ||
| 47 | |||
| 48 | // Test PWM output | ||
| 49 | let pin1 = Input::new(p.PIN_9, Pull::None); | ||
| 50 | let _pwm = Pwm::new_output_a(p.PWM_SLICE3, p.PIN_6, pwm_cfg); | ||
| 51 | Timer::after_millis(1).await; | ||
| 52 | let initial_state = pin1.is_low(); | ||
| 53 | Timer::after_millis(5).await; | ||
| 54 | assert_eq!(pin1.is_high(), initial_state); | ||
| 55 | Timer::after_millis(5).await; | ||
| 56 | assert_eq!(pin1.is_low(), initial_state); | ||
| 57 | info!("PWM test passed!"); | ||
| 58 | |||
| 59 | info!("All tests passed at 200MHz!"); | ||
| 60 | info!("Overclock test successful"); | ||
| 61 | cortex_m::asm::bkpt(); | ||
| 62 | } | ||
