diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-02-21 23:38:51 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2024-02-21 23:38:51 +0100 |
| commit | 036f703a4a42ae67d2b0fdc6b5268ac04d5066f7 (patch) | |
| tree | d83096f7dec77ae1b3cb352675f7b3f00c6624b4 | |
| parent | 2feed96c91e2bd3846452e87b575b3d57ae3cde8 (diff) | |
nrf/uart: add buffereduart drop, rxonly, txonly tests.
| -rw-r--r-- | tests/nrf52840/src/bin/buffered_uart.rs | 87 | ||||
| -rw-r--r-- | tests/nrf52840/src/bin/buffered_uart_halves.rs | 82 |
2 files changed, 127 insertions, 42 deletions
diff --git a/tests/nrf52840/src/bin/buffered_uart.rs b/tests/nrf52840/src/bin/buffered_uart.rs index 721751136..a01d66d85 100644 --- a/tests/nrf52840/src/bin/buffered_uart.rs +++ b/tests/nrf52840/src/bin/buffered_uart.rs | |||
| @@ -15,7 +15,7 @@ bind_interrupts!(struct Irqs { | |||
| 15 | 15 | ||
| 16 | #[embassy_executor::main] | 16 | #[embassy_executor::main] |
| 17 | async fn main(_spawner: Spawner) { | 17 | async fn main(_spawner: Spawner) { |
| 18 | let p = embassy_nrf::init(Default::default()); | 18 | let mut p = embassy_nrf::init(Default::default()); |
| 19 | let mut config = uarte::Config::default(); | 19 | let mut config = uarte::Config::default(); |
| 20 | config.parity = uarte::Parity::EXCLUDED; | 20 | config.parity = uarte::Parity::EXCLUDED; |
| 21 | config.baudrate = uarte::Baudrate::BAUD1M; | 21 | config.baudrate = uarte::Baudrate::BAUD1M; |
| @@ -23,55 +23,58 @@ async fn main(_spawner: Spawner) { | |||
| 23 | let mut tx_buffer = [0u8; 1024]; | 23 | let mut tx_buffer = [0u8; 1024]; |
| 24 | let mut rx_buffer = [0u8; 1024]; | 24 | let mut rx_buffer = [0u8; 1024]; |
| 25 | 25 | ||
| 26 | let u = BufferedUarte::new( | 26 | // test teardown + recreate of the buffereduarte works fine. |
| 27 | p.UARTE0, | 27 | for _ in 0..2 { |
| 28 | p.TIMER0, | 28 | let u = BufferedUarte::new( |
| 29 | p.PPI_CH0, | 29 | &mut p.UARTE0, |
| 30 | p.PPI_CH1, | 30 | &mut p.TIMER0, |
| 31 | p.PPI_GROUP0, | 31 | &mut p.PPI_CH0, |
| 32 | Irqs, | 32 | &mut p.PPI_CH1, |
| 33 | p.P1_03, | 33 | &mut p.PPI_GROUP0, |
| 34 | p.P1_02, | 34 | Irqs, |
| 35 | config.clone(), | 35 | &mut p.P1_03, |
| 36 | &mut rx_buffer, | 36 | &mut p.P1_02, |
| 37 | &mut tx_buffer, | 37 | config.clone(), |
| 38 | ); | 38 | &mut rx_buffer, |
| 39 | &mut tx_buffer, | ||
| 40 | ); | ||
| 39 | 41 | ||
| 40 | info!("uarte initialized!"); | 42 | info!("uarte initialized!"); |
| 41 | 43 | ||
| 42 | let (mut rx, mut tx) = u.split(); | 44 | let (mut rx, mut tx) = u.split(); |
| 43 | 45 | ||
| 44 | const COUNT: usize = 40_000; | 46 | const COUNT: usize = 40_000; |
| 45 | 47 | ||
| 46 | let tx_fut = async { | 48 | let tx_fut = async { |
| 47 | let mut tx_buf = [0; 215]; | 49 | let mut tx_buf = [0; 215]; |
| 48 | let mut i = 0; | 50 | let mut i = 0; |
| 49 | while i < COUNT { | 51 | while i < COUNT { |
| 50 | let n = tx_buf.len().min(COUNT - i); | 52 | let n = tx_buf.len().min(COUNT - i); |
| 51 | let tx_buf = &mut tx_buf[..n]; | 53 | let tx_buf = &mut tx_buf[..n]; |
| 52 | for (j, b) in tx_buf.iter_mut().enumerate() { | 54 | for (j, b) in tx_buf.iter_mut().enumerate() { |
| 53 | *b = (i + j) as u8; | 55 | *b = (i + j) as u8; |
| 56 | } | ||
| 57 | let n = unwrap!(tx.write(tx_buf).await); | ||
| 58 | i += n; | ||
| 54 | } | 59 | } |
| 55 | let n = unwrap!(tx.write(tx_buf).await); | 60 | }; |
| 56 | i += n; | 61 | let rx_fut = async { |
| 57 | } | 62 | let mut i = 0; |
| 58 | }; | 63 | while i < COUNT { |
| 59 | let rx_fut = async { | 64 | let buf = unwrap!(rx.fill_buf().await); |
| 60 | let mut i = 0; | ||
| 61 | while i < COUNT { | ||
| 62 | let buf = unwrap!(rx.fill_buf().await); | ||
| 63 | 65 | ||
| 64 | for &b in buf { | 66 | for &b in buf { |
| 65 | assert_eq!(b, i as u8); | 67 | assert_eq!(b, i as u8); |
| 66 | i = i + 1; | 68 | i = i + 1; |
| 67 | } | 69 | } |
| 68 | 70 | ||
| 69 | let n = buf.len(); | 71 | let n = buf.len(); |
| 70 | rx.consume(n); | 72 | rx.consume(n); |
| 71 | } | 73 | } |
| 72 | }; | 74 | }; |
| 73 | 75 | ||
| 74 | join(rx_fut, tx_fut).await; | 76 | join(rx_fut, tx_fut).await; |
| 77 | } | ||
| 75 | 78 | ||
| 76 | info!("Test OK"); | 79 | info!("Test OK"); |
| 77 | cortex_m::asm::bkpt(); | 80 | cortex_m::asm::bkpt(); |
diff --git a/tests/nrf52840/src/bin/buffered_uart_halves.rs b/tests/nrf52840/src/bin/buffered_uart_halves.rs new file mode 100644 index 000000000..54a9fef5b --- /dev/null +++ b/tests/nrf52840/src/bin/buffered_uart_halves.rs | |||
| @@ -0,0 +1,82 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | teleprobe_meta::target!(b"nrf52840-dk"); | ||
| 4 | |||
| 5 | use defmt::{assert_eq, *}; | ||
| 6 | use embassy_executor::Spawner; | ||
| 7 | use embassy_futures::join::join; | ||
| 8 | use embassy_nrf::buffered_uarte::{self, BufferedUarteRx, BufferedUarteTx}; | ||
| 9 | use embassy_nrf::{bind_interrupts, peripherals, uarte}; | ||
| 10 | use {defmt_rtt as _, panic_probe as _}; | ||
| 11 | |||
| 12 | bind_interrupts!(struct Irqs { | ||
| 13 | UARTE0_UART0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>; | ||
| 14 | UARTE1 => buffered_uarte::InterruptHandler<peripherals::UARTE1>; | ||
| 15 | }); | ||
| 16 | |||
| 17 | #[embassy_executor::main] | ||
| 18 | async fn main(_spawner: Spawner) { | ||
| 19 | let mut p = embassy_nrf::init(Default::default()); | ||
| 20 | let mut config = uarte::Config::default(); | ||
| 21 | config.parity = uarte::Parity::EXCLUDED; | ||
| 22 | config.baudrate = uarte::Baudrate::BAUD1M; | ||
| 23 | |||
| 24 | let mut tx_buffer = [0u8; 1024]; | ||
| 25 | let mut rx_buffer = [0u8; 1024]; | ||
| 26 | |||
| 27 | // test teardown + recreate of the buffereduarte works fine. | ||
| 28 | for _ in 0..2 { | ||
| 29 | const COUNT: usize = 40_000; | ||
| 30 | |||
| 31 | let mut tx = BufferedUarteTx::new(&mut p.UARTE1, Irqs, &mut p.P1_02, config.clone(), &mut tx_buffer); | ||
| 32 | |||
| 33 | let mut rx = BufferedUarteRx::new( | ||
| 34 | &mut p.UARTE0, | ||
| 35 | &mut p.TIMER0, | ||
| 36 | &mut p.PPI_CH0, | ||
| 37 | &mut p.PPI_CH1, | ||
| 38 | &mut p.PPI_GROUP0, | ||
| 39 | Irqs, | ||
| 40 | &mut p.P1_03, | ||
| 41 | config.clone(), | ||
| 42 | &mut rx_buffer, | ||
| 43 | ); | ||
| 44 | |||
| 45 | let tx_fut = async { | ||
| 46 | info!("tx initialized!"); | ||
| 47 | |||
| 48 | let mut tx_buf = [0; 215]; | ||
| 49 | let mut i = 0; | ||
| 50 | while i < COUNT { | ||
| 51 | let n = tx_buf.len().min(COUNT - i); | ||
| 52 | let tx_buf = &mut tx_buf[..n]; | ||
| 53 | for (j, b) in tx_buf.iter_mut().enumerate() { | ||
| 54 | *b = (i + j) as u8; | ||
| 55 | } | ||
| 56 | let n = unwrap!(tx.write(tx_buf).await); | ||
| 57 | i += n; | ||
| 58 | } | ||
| 59 | }; | ||
| 60 | let rx_fut = async { | ||
| 61 | info!("rx initialized!"); | ||
| 62 | |||
| 63 | let mut i = 0; | ||
| 64 | while i < COUNT { | ||
| 65 | let buf = unwrap!(rx.fill_buf().await); | ||
| 66 | |||
| 67 | for &b in buf { | ||
| 68 | assert_eq!(b, i as u8); | ||
| 69 | i = i + 1; | ||
| 70 | } | ||
| 71 | |||
| 72 | let n = buf.len(); | ||
| 73 | rx.consume(n); | ||
| 74 | } | ||
| 75 | }; | ||
| 76 | |||
| 77 | join(rx_fut, tx_fut).await; | ||
| 78 | } | ||
| 79 | |||
| 80 | info!("Test OK"); | ||
| 81 | cortex_m::asm::bkpt(); | ||
| 82 | } | ||
