aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp-examples/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-03-29 04:11:32 +0200
committerDario Nieuwenhuis <[email protected]>2021-03-29 21:35:25 +0200
commit2cd3bdc90cf5da6d07ddad91e875733b8e354dc5 (patch)
tree846d9ef3d4b3171a6fcf4febe1a79aefa23cd378 /embassy-rp-examples/src
parent2bcd1aaebbf255de1ded97356c107df5bea04e57 (diff)
rp: add initial version
Diffstat (limited to 'embassy-rp-examples/src')
-rw-r--r--embassy-rp-examples/src/main.rs72
1 files changed, 72 insertions, 0 deletions
diff --git a/embassy-rp-examples/src/main.rs b/embassy-rp-examples/src/main.rs
new file mode 100644
index 000000000..e1da77aa5
--- /dev/null
+++ b/embassy-rp-examples/src/main.rs
@@ -0,0 +1,72 @@
1#![no_std]
2#![no_main]
3#![feature(asm)]
4#![feature(min_type_alias_impl_trait)]
5#![feature(impl_trait_in_bindings)]
6#![feature(type_alias_impl_trait)]
7
8use core::sync::atomic::{AtomicUsize, Ordering};
9use defmt::{panic, *};
10use defmt_rtt as _;
11use embassy::executor::Spawner;
12use embassy::interrupt::InterruptExt;
13use embassy_rp::{dma, gpio, interrupt, uart, Peripherals};
14use embedded_hal::digital::v2::OutputPin;
15use panic_probe as _;
16use rp2040_pac2 as pac;
17
18#[link_section = ".boot2"]
19#[used]
20pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER;
21
22defmt::timestamp! {"{=u64}", {
23 static COUNT: AtomicUsize = AtomicUsize::new(0);
24 // NOTE(no-CAS) `timestamps` runs with interrupts disabled
25 let n = COUNT.load(Ordering::Relaxed);
26 COUNT.store(n + 1, Ordering::Relaxed);
27 n as u64
28}
29}
30
31#[embassy::main]
32async fn main(spanwer: Spawner) {
33 let p = unwrap!(Peripherals::take());
34
35 let mut config = uart::Config::default();
36 let mut uart = uart::Uart::new(p.UART0, p.PIN_0, p.PIN_1, p.PIN_2, p.PIN_3, config);
37 uart.send("Hello World!\r\n".as_bytes());
38
39 let mut led = gpio::Output::new(p.PIN_25, gpio::Level::Low);
40
41 let irq = interrupt::take!(DMA_IRQ_0);
42 unsafe {
43 //pac::DMA.inte0().write(|w| w.set_inte0(1 << 0));
44 }
45 irq.set_handler(dma_irq);
46 irq.unpend();
47 irq.enable();
48
49 let from: [u32; 4] = [1, 2, 3, 4];
50 let mut to: [u32; 4] = [9, 8, 7, 6];
51 info!("before dma: from = {:?}, to = {:?}", from, to);
52 cortex_m::asm::delay(4_000_000);
53 dma::Dma::copy(p.DMA_CH0, &from, &mut to);
54 cortex_m::asm::delay(4_000_000);
55 info!("after dma: from = {:?}, to = {:?}", from, to);
56
57 loop {
58 info!("led on!");
59 uart.send("ON!\r".as_bytes());
60 led.set_high().unwrap();
61 cortex_m::asm::delay(1_000_000);
62
63 info!("led off!");
64 uart.send("Off!\r".as_bytes());
65 led.set_low().unwrap();
66 cortex_m::asm::delay(4_000_000);
67 }
68}
69
70unsafe fn dma_irq(ctx: *mut ()) {
71 info!("DMA IRQ!");
72}