aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-02-21 23:38:51 +0100
committerDario Nieuwenhuis <[email protected]>2024-02-21 23:38:51 +0100
commit036f703a4a42ae67d2b0fdc6b5268ac04d5066f7 (patch)
treed83096f7dec77ae1b3cb352675f7b3f00c6624b4 /tests
parent2feed96c91e2bd3846452e87b575b3d57ae3cde8 (diff)
nrf/uart: add buffereduart drop, rxonly, txonly tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/nrf52840/src/bin/buffered_uart.rs87
-rw-r--r--tests/nrf52840/src/bin/buffered_uart_halves.rs82
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]
17async fn main(_spawner: Spawner) { 17async 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]
3teleprobe_meta::target!(b"nrf52840-dk");
4
5use defmt::{assert_eq, *};
6use embassy_executor::Spawner;
7use embassy_futures::join::join;
8use embassy_nrf::buffered_uarte::{self, BufferedUarteRx, BufferedUarteTx};
9use embassy_nrf::{bind_interrupts, peripherals, uarte};
10use {defmt_rtt as _, panic_probe as _};
11
12bind_interrupts!(struct Irqs {
13 UARTE0_UART0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>;
14 UARTE1 => buffered_uarte::InterruptHandler<peripherals::UARTE1>;
15});
16
17#[embassy_executor::main]
18async 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}