aboutsummaryrefslogtreecommitdiff
path: root/tests/rp/src/bin/overclock.rs
diff options
context:
space:
mode:
author1-rafael-1 <[email protected]>2025-05-01 18:29:13 +0200
committer1-rafael-1 <[email protected]>2025-05-01 18:29:13 +0200
commit3c559378a5f3662134cb7db2d902302d7cb8f937 (patch)
treefc581e429e8d413ee2b97476ad23ce50dfed134b /tests/rp/src/bin/overclock.rs
parentc01776a3d779caf5f43fda03e5506f569f1bf9ac (diff)
Add overclocking test for RP2040 with timer and PWM tests at 200Mhz
Diffstat (limited to 'tests/rp/src/bin/overclock.rs')
-rw-r--r--tests/rp/src/bin/overclock.rs62
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")]
4teleprobe_meta::target!(b"rpi-pico");
5
6use defmt::{assert, assert_eq, info};
7use embassy_executor::Spawner;
8use embassy_rp::config::Config;
9use embassy_rp::gpio::{Input, Pull};
10use embassy_rp::pwm::{Config as PwmConfig, Pwm};
11use embassy_time::{Instant, Timer};
12use {defmt_rtt as _, panic_probe as _};
13
14#[cfg(feature = "rp2040")]
15#[embassy_executor::main]
16async 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}