aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf-examples/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-03-22 01:15:44 +0100
committerDario Nieuwenhuis <[email protected]>2021-03-29 00:58:58 +0200
commitdf42c384923579c449a13511b0fdb8de3b2a4773 (patch)
tree0c89eb75183e972e81748f9a3e601df30191c14a /embassy-nrf-examples/src
parent7b6086d19eca2d51c7cddf9dbbbc47eacf371472 (diff)
nrf/uarte: update to new api
Diffstat (limited to 'embassy-nrf-examples/src')
-rw-r--r--embassy-nrf-examples/src/bin/uart.rs56
1 files changed, 23 insertions, 33 deletions
diff --git a/embassy-nrf-examples/src/bin/uart.rs b/embassy-nrf-examples/src/bin/uart.rs
index 0acd6fded..c39e70d53 100644
--- a/embassy-nrf-examples/src/bin/uart.rs
+++ b/embassy-nrf-examples/src/bin/uart.rs
@@ -12,38 +12,26 @@ use cortex_m_rt::entry;
12use defmt::panic; 12use defmt::panic;
13use embassy::executor::{task, Executor}; 13use embassy::executor::{task, Executor};
14use embassy::time::{Duration, Timer}; 14use embassy::time::{Duration, Timer};
15use embassy::traits::uart::Uart; 15use embassy::traits::uart::{Read, Write};
16use embassy::util::Forever; 16use embassy::util::Forever;
17use embassy_nrf::{interrupt, pac, rtc, uarte}; 17use embassy_nrf::{interrupt, pac, rtc, uarte, Peripherals};
18use futures::future::{select, Either}; 18use futures::future::{select, Either};
19use futures::pin_mut;
19use nrf52840_hal::clocks; 20use nrf52840_hal::clocks;
20use nrf52840_hal::gpio; 21use nrf52840_hal::gpio;
21 22
22#[task] 23#[task]
23async fn run(uart: pac::UARTE0, port: pac::P0) { 24async fn run() {
24 // Init UART 25 let p = Peripherals::take().unwrap();
25 let port0 = gpio::p0::Parts::new(port); 26
26 27 let mut config = uarte::Config::default();
27 let pins = uarte::Pins { 28 config.parity = uarte::Parity::EXCLUDED;
28 rxd: port0.p0_08.into_floating_input().degrade(), 29 config.baudrate = uarte::Baudrate::BAUD115200;
29 txd: port0 30
30 .p0_06 31 let irq = interrupt::take!(UARTE0_UART0);
31 .into_push_pull_output(gpio::Level::Low) 32 let uart =
32 .degrade(), 33 unsafe { uarte::Uarte::new(p.uarte0, irq, p.p0_08, p.p0_06, p.p0_07, p.p0_05, config) };
33 cts: None, 34 pin_mut!(uart);
34 rts: None,
35 };
36
37 // NOTE(unsafe): Safe becasue we do not use `mem::forget` anywhere.
38 let mut uart = unsafe {
39 uarte::Uarte::new(
40 uart,
41 interrupt::take!(UARTE0_UART0),
42 pins,
43 uarte::Parity::EXCLUDED,
44 uarte::Baudrate::BAUD115200,
45 )
46 };
47 35
48 info!("uarte initialized!"); 36 info!("uarte initialized!");
49 37
@@ -51,19 +39,22 @@ async fn run(uart: pac::UARTE0, port: pac::P0) {
51 let mut buf = [0; 8]; 39 let mut buf = [0; 8];
52 buf.copy_from_slice(b"Hello!\r\n"); 40 buf.copy_from_slice(b"Hello!\r\n");
53 41
54 unwrap!(uart.send(&buf).await); 42 unwrap!(uart.as_mut().write(&buf).await);
55 info!("wrote hello in uart!"); 43 info!("wrote hello in uart!");
56 44
57 loop { 45 loop {
58 let buf_len = buf.len();
59 info!("reading..."); 46 info!("reading...");
47 unwrap!(uart.as_mut().read(&mut buf).await);
48 info!("writing...");
49 unwrap!(uart.as_mut().write(&buf).await);
60 50
51 /*
61 // `receive()` doesn't return until the buffer has been completely filled with 52 // `receive()` doesn't return until the buffer has been completely filled with
62 // incoming data, which in this case is 8 bytes. 53 // incoming data, which in this case is 8 bytes.
63 // 54 //
64 // This example shows how to use `select` to run an uart receive concurrently with a 55 // This example shows how to use `select` to run an uart receive concurrently with a
65 // 1 second timer, effectively adding a timeout to the receive operation. 56 // 1 second timer, effectively adding a timeout to the receive operation.
66 let recv_fut = uart.receive(&mut buf); 57 let recv_fut = uart.read(&mut buf);
67 let timer_fut = Timer::after(Duration::from_millis(1000)); 58 let timer_fut = Timer::after(Duration::from_millis(1000));
68 let received_len = match select(recv_fut, timer_fut).await { 59 let received_len = match select(recv_fut, timer_fut).await {
69 // recv_fut completed first, so we've received `buf_len` bytes. 60 // recv_fut completed first, so we've received `buf_len` bytes.
@@ -81,8 +72,9 @@ async fn run(uart: pac::UARTE0, port: pac::P0) {
81 info!("read done, got {}", received); 72 info!("read done, got {}", received);
82 73
83 // Echo back received data 74 // Echo back received data
84 unwrap!(uart.send(received).await); 75 unwrap!(uart.write(received).await);
85 } 76 }
77 */
86 } 78 }
87} 79}
88 80
@@ -110,9 +102,7 @@ fn main() -> ! {
110 let executor = EXECUTOR.put(Executor::new()); 102 let executor = EXECUTOR.put(Executor::new());
111 executor.set_alarm(alarm); 103 executor.set_alarm(alarm);
112 104
113 let uarte0 = p.UARTE0;
114 let p0 = p.P0;
115 executor.run(|spawner| { 105 executor.run(|spawner| {
116 unwrap!(spawner.spawn(run(uarte0, p0))); 106 unwrap!(spawner.spawn(run()));
117 }); 107 });
118} 108}