diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-03-22 01:15:44 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2021-03-29 00:58:58 +0200 |
| commit | df42c384923579c449a13511b0fdb8de3b2a4773 (patch) | |
| tree | 0c89eb75183e972e81748f9a3e601df30191c14a /embassy-nrf-examples/src | |
| parent | 7b6086d19eca2d51c7cddf9dbbbc47eacf371472 (diff) | |
nrf/uarte: update to new api
Diffstat (limited to 'embassy-nrf-examples/src')
| -rw-r--r-- | embassy-nrf-examples/src/bin/uart.rs | 56 |
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; | |||
| 12 | use defmt::panic; | 12 | use defmt::panic; |
| 13 | use embassy::executor::{task, Executor}; | 13 | use embassy::executor::{task, Executor}; |
| 14 | use embassy::time::{Duration, Timer}; | 14 | use embassy::time::{Duration, Timer}; |
| 15 | use embassy::traits::uart::Uart; | 15 | use embassy::traits::uart::{Read, Write}; |
| 16 | use embassy::util::Forever; | 16 | use embassy::util::Forever; |
| 17 | use embassy_nrf::{interrupt, pac, rtc, uarte}; | 17 | use embassy_nrf::{interrupt, pac, rtc, uarte, Peripherals}; |
| 18 | use futures::future::{select, Either}; | 18 | use futures::future::{select, Either}; |
| 19 | use futures::pin_mut; | ||
| 19 | use nrf52840_hal::clocks; | 20 | use nrf52840_hal::clocks; |
| 20 | use nrf52840_hal::gpio; | 21 | use nrf52840_hal::gpio; |
| 21 | 22 | ||
| 22 | #[task] | 23 | #[task] |
| 23 | async fn run(uart: pac::UARTE0, port: pac::P0) { | 24 | async 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 | } |
