aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorkbleeke <[email protected]>2023-03-19 16:43:46 +0100
committerkbleeke <[email protected]>2023-03-19 17:00:45 +0100
commita6a2a035d57ced9a7a9bb2ef325885063ea83295 (patch)
tree35481496cc4a9fbd7870b594be7458503c80b300 /examples
parent0ff606dfc151b1b3812087b7508fdf4bee3b240b (diff)
even faster pio speed are possible
Diffstat (limited to 'examples')
-rw-r--r--examples/rpi-pico-w/src/pio.rs22
1 files changed, 15 insertions, 7 deletions
diff --git a/examples/rpi-pico-w/src/pio.rs b/examples/rpi-pico-w/src/pio.rs
index abb71b5de..1bf304d5d 100644
--- a/examples/rpi-pico-w/src/pio.rs
+++ b/examples/rpi-pico-w/src/pio.rs
@@ -2,7 +2,7 @@ use core::slice;
2 2
3use cyw43::SpiBusCyw43; 3use cyw43::SpiBusCyw43;
4use embassy_rp::dma::Channel; 4use embassy_rp::dma::Channel;
5use embassy_rp::gpio::{Pin, Pull}; 5use embassy_rp::gpio::{Drive, Pin, Pull, SlewRate};
6use embassy_rp::pio::{PioStateMachine, ShiftDirection}; 6use embassy_rp::pio::{PioStateMachine, ShiftDirection};
7use embassy_rp::relocate::RelocatedProgram; 7use embassy_rp::relocate::RelocatedProgram;
8use embassy_rp::{pio_instr_util, Peripheral}; 8use embassy_rp::{pio_instr_util, Peripheral};
@@ -43,10 +43,11 @@ where
43 "out pins, 1 side 0" 43 "out pins, 1 side 0"
44 "jmp x-- lp side 1" 44 "jmp x-- lp side 1"
45 "set pindirs, 0 side 0" 45 "set pindirs, 0 side 0"
46 // "nop side 1" 46 "nop side 1"
47 "lp2:" 47 "lp2:"
48 "in pins, 1 side 0" 48 "in pins, 1 side 1"
49 "jmp y-- lp2 side 1" 49 "jmp y-- lp2 side 0"
50
50 ".wrap" 51 ".wrap"
51 ); 52 );
52 53
@@ -55,15 +56,22 @@ where
55 let mut pin_io = sm.make_pio_pin(dio); 56 let mut pin_io = sm.make_pio_pin(dio);
56 pin_io.set_pull(Pull::Down); 57 pin_io.set_pull(Pull::Down);
57 pin_io.set_schmitt(true); 58 pin_io.set_schmitt(true);
58 let pin_clk = sm.make_pio_pin(clk); 59 pin_io.set_input_sync_bypass(true);
60
61 let mut pin_clk = sm.make_pio_pin(clk);
62 pin_clk.set_drive_strength(Drive::_12mA);
63 pin_clk.set_slew_rate(SlewRate::Fast);
59 64
60 sm.write_instr(relocated.origin() as usize, relocated.code()); 65 sm.write_instr(relocated.origin() as usize, relocated.code());
61 66
67 // 32 Mhz
68 sm.set_clkdiv(0x03E8);
69
62 // 16 Mhz 70 // 16 Mhz
63 sm.set_clkdiv(0x07d0); 71 // sm.set_clkdiv(0x07d0);
64 72
65 // 8Mhz 73 // 8Mhz
66 sm.set_clkdiv(0x0a_00); 74 // sm.set_clkdiv(0x0a_00);
67 75
68 // 1Mhz 76 // 1Mhz
69 // sm.set_clkdiv(0x7d_00); 77 // sm.set_clkdiv(0x7d_00);