mirror of
https://github.com/italicsjenga/rp-hal-boards.git
synced 2024-12-24 05:01:31 +11:00
Add a simple example for PIO.
This commit is contained in:
parent
389e0ea715
commit
b79f859d72
65
rp2040-hal/examples/pio_blink.rs
Normal file
65
rp2040-hal/examples/pio_blink.rs
Normal file
|
@ -0,0 +1,65 @@
|
|||
//! Blinks the LED on a Pico board, using a PIO program
|
||||
//!
|
||||
//! This will blink an LED attached to GP25, which is the pin the Pico uses for the on-board LED.
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use cortex_m_rt::entry;
|
||||
use hal::gpio::{FunctionPio0, Pin};
|
||||
use hal::pac;
|
||||
use hal::sio::Sio;
|
||||
use panic_halt as _;
|
||||
use rp2040_hal as hal;
|
||||
|
||||
#[link_section = ".boot2"]
|
||||
#[used]
|
||||
pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER;
|
||||
|
||||
#[entry]
|
||||
fn main() -> ! {
|
||||
let mut pac = pac::Peripherals::take().unwrap();
|
||||
|
||||
let sio = Sio::new(pac.SIO);
|
||||
let pins = hal::gpio::Pins::new(
|
||||
pac.IO_BANK0,
|
||||
pac.PADS_BANK0,
|
||||
sio.gpio_bank0,
|
||||
&mut pac.RESETS,
|
||||
);
|
||||
|
||||
// configure LED pin for Pio0.
|
||||
let _led: Pin<_, FunctionPio0> = pins.gpio25.into_mode();
|
||||
// PIN id for use inside of PIO
|
||||
let led_pin_id = 25;
|
||||
|
||||
// Define some simple PIO program.
|
||||
const MAX_DELAY: u8 = 31;
|
||||
let mut a = pio::Assembler::<32>::new();
|
||||
let mut wrap_target = a.label();
|
||||
let mut wrap_source = a.label();
|
||||
// Set pin as Out
|
||||
a.set(pio::SetDestination::PINDIRS, 1);
|
||||
a.bind(&mut wrap_target);
|
||||
// Set pin low
|
||||
a.set_with_delay(pio::SetDestination::PINS, 0, MAX_DELAY);
|
||||
// Set pin high
|
||||
a.set_with_delay(pio::SetDestination::PINS, 1, MAX_DELAY);
|
||||
// NOP
|
||||
a.bind(&mut wrap_source);
|
||||
let program = a.assemble_with_wrap(wrap_source, wrap_target);
|
||||
|
||||
// Initialize and start PIO
|
||||
let pio = rp2040_hal::pio::PIO::new(pac.PIO0, &mut pac.RESETS);
|
||||
let sm = &pio.state_machines()[0];
|
||||
let div = 0f32; // as slow as possible (0 is interpreted as 65536)
|
||||
rp2040_hal::pio::PIOBuilder::default()
|
||||
.with_program(&program)
|
||||
.set_pins(led_pin_id, 1)
|
||||
.clock_divisor(div)
|
||||
.build(&pio, sm)
|
||||
.unwrap();
|
||||
|
||||
// PIO runs in background, independently from CPU
|
||||
#[allow(clippy::empty_loop)]
|
||||
loop {}
|
||||
}
|
Loading…
Reference in a new issue