diff options
| author | pennae <[email protected]> | 2023-05-15 15:21:05 +0200 |
|---|---|---|
| committer | pennae <[email protected]> | 2023-05-15 15:24:56 +0200 |
| commit | 14a5d03af2a74eccaa9930bdf81eef43791a4b33 (patch) | |
| tree | 3a0879c21cf09702c670b14672e62b940a2157f0 /tests | |
| parent | 82f7e104d90a6628d1873017ea5ef6a7afb3b3f7 (diff) | |
rp: remove take!, add bind_interrupts!
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/rp/src/bin/uart_buffered.rs | 20 | ||||
| -rw-r--r-- | tests/rp/src/bin/uart_dma.rs | 20 | ||||
| -rw-r--r-- | tests/rp/src/bin/uart_upgrade.rs | 12 |
3 files changed, 32 insertions, 20 deletions
diff --git a/tests/rp/src/bin/uart_buffered.rs b/tests/rp/src/bin/uart_buffered.rs index 1deb22ce6..1dcf57d07 100644 --- a/tests/rp/src/bin/uart_buffered.rs +++ b/tests/rp/src/bin/uart_buffered.rs | |||
| @@ -4,13 +4,18 @@ | |||
| 4 | 4 | ||
| 5 | use defmt::{assert_eq, panic, *}; | 5 | use defmt::{assert_eq, panic, *}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_rp::bind_interrupts; | ||
| 7 | use embassy_rp::gpio::{Level, Output}; | 8 | use embassy_rp::gpio::{Level, Output}; |
| 8 | use embassy_rp::interrupt; | 9 | use embassy_rp::peripherals::UART0; |
| 9 | use embassy_rp::uart::{BufferedUart, BufferedUartRx, Config, Error, Instance, Parity}; | 10 | use embassy_rp::uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, Config, Error, Instance, Parity}; |
| 10 | use embassy_time::{Duration, Timer}; | 11 | use embassy_time::{Duration, Timer}; |
| 11 | use embedded_io::asynch::{Read, ReadExactError, Write}; | 12 | use embedded_io::asynch::{Read, ReadExactError, Write}; |
| 12 | use {defmt_rtt as _, panic_probe as _}; | 13 | use {defmt_rtt as _, panic_probe as _}; |
| 13 | 14 | ||
| 15 | bind_interrupts!(struct Irqs { | ||
| 16 | UART0_IRQ => BufferedInterruptHandler<UART0>; | ||
| 17 | }); | ||
| 18 | |||
| 14 | async fn read<const N: usize>(uart: &mut BufferedUart<'_, impl Instance>) -> Result<[u8; N], Error> { | 19 | async fn read<const N: usize>(uart: &mut BufferedUart<'_, impl Instance>) -> Result<[u8; N], Error> { |
| 15 | let mut buf = [255; N]; | 20 | let mut buf = [255; N]; |
| 16 | match uart.read_exact(&mut buf).await { | 21 | match uart.read_exact(&mut buf).await { |
| @@ -60,13 +65,12 @@ async fn main(_spawner: Spawner) { | |||
| 60 | info!("Hello World!"); | 65 | info!("Hello World!"); |
| 61 | 66 | ||
| 62 | let (mut tx, mut rx, mut uart) = (p.PIN_0, p.PIN_1, p.UART0); | 67 | let (mut tx, mut rx, mut uart) = (p.PIN_0, p.PIN_1, p.UART0); |
| 63 | let mut irq = interrupt::take!(UART0_IRQ); | ||
| 64 | 68 | ||
| 65 | { | 69 | { |
| 66 | let config = Config::default(); | 70 | let config = Config::default(); |
| 67 | let tx_buf = &mut [0u8; 16]; | 71 | let tx_buf = &mut [0u8; 16]; |
| 68 | let rx_buf = &mut [0u8; 16]; | 72 | let rx_buf = &mut [0u8; 16]; |
| 69 | let mut uart = BufferedUart::new(&mut uart, &mut irq, &mut tx, &mut rx, tx_buf, rx_buf, config); | 73 | let mut uart = BufferedUart::new(&mut uart, Irqs, &mut tx, &mut rx, tx_buf, rx_buf, config); |
| 70 | 74 | ||
| 71 | // Make sure we send more bytes than fits in the FIFO, to test the actual | 75 | // Make sure we send more bytes than fits in the FIFO, to test the actual |
| 72 | // bufferedUart. | 76 | // bufferedUart. |
| @@ -86,7 +90,7 @@ async fn main(_spawner: Spawner) { | |||
| 86 | let config = Config::default(); | 90 | let config = Config::default(); |
| 87 | let tx_buf = &mut [0u8; 16]; | 91 | let tx_buf = &mut [0u8; 16]; |
| 88 | let rx_buf = &mut [0u8; 16]; | 92 | let rx_buf = &mut [0u8; 16]; |
| 89 | let mut uart = BufferedUart::new(&mut uart, &mut irq, &mut tx, &mut rx, tx_buf, rx_buf, config); | 93 | let mut uart = BufferedUart::new(&mut uart, Irqs, &mut tx, &mut rx, tx_buf, rx_buf, config); |
| 90 | 94 | ||
| 91 | // Make sure we send more bytes than fits in the FIFO, to test the actual | 95 | // Make sure we send more bytes than fits in the FIFO, to test the actual |
| 92 | // bufferedUart. | 96 | // bufferedUart. |
| @@ -121,7 +125,7 @@ async fn main(_spawner: Spawner) { | |||
| 121 | config.baudrate = 1000; | 125 | config.baudrate = 1000; |
| 122 | let tx_buf = &mut [0u8; 16]; | 126 | let tx_buf = &mut [0u8; 16]; |
| 123 | let rx_buf = &mut [0u8; 16]; | 127 | let rx_buf = &mut [0u8; 16]; |
| 124 | let mut uart = BufferedUart::new(&mut uart, &mut irq, &mut tx, &mut rx, tx_buf, rx_buf, config); | 128 | let mut uart = BufferedUart::new(&mut uart, Irqs, &mut tx, &mut rx, tx_buf, rx_buf, config); |
| 125 | 129 | ||
| 126 | // break on empty buffer | 130 | // break on empty buffer |
| 127 | uart.send_break(20).await; | 131 | uart.send_break(20).await; |
| @@ -155,7 +159,7 @@ async fn main(_spawner: Spawner) { | |||
| 155 | config.baudrate = 1000; | 159 | config.baudrate = 1000; |
| 156 | config.parity = Parity::ParityEven; | 160 | config.parity = Parity::ParityEven; |
| 157 | let rx_buf = &mut [0u8; 16]; | 161 | let rx_buf = &mut [0u8; 16]; |
| 158 | let mut uart = BufferedUartRx::new(&mut uart, &mut irq, &mut rx, rx_buf, config); | 162 | let mut uart = BufferedUartRx::new(&mut uart, Irqs, &mut rx, rx_buf, config); |
| 159 | 163 | ||
| 160 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, parity: u32) { | 164 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, parity: u32) { |
| 161 | send(pin, v, Some(parity != 0)).await; | 165 | send(pin, v, Some(parity != 0)).await; |
| @@ -202,7 +206,7 @@ async fn main(_spawner: Spawner) { | |||
| 202 | let mut config = Config::default(); | 206 | let mut config = Config::default(); |
| 203 | config.baudrate = 1000; | 207 | config.baudrate = 1000; |
| 204 | let rx_buf = &mut [0u8; 16]; | 208 | let rx_buf = &mut [0u8; 16]; |
| 205 | let mut uart = BufferedUartRx::new(&mut uart, &mut irq, &mut rx, rx_buf, config); | 209 | let mut uart = BufferedUartRx::new(&mut uart, Irqs, &mut rx, rx_buf, config); |
| 206 | 210 | ||
| 207 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, good: bool) { | 211 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, good: bool) { |
| 208 | if good { | 212 | if good { |
diff --git a/tests/rp/src/bin/uart_dma.rs b/tests/rp/src/bin/uart_dma.rs index 52f42e582..75be76eda 100644 --- a/tests/rp/src/bin/uart_dma.rs +++ b/tests/rp/src/bin/uart_dma.rs | |||
| @@ -4,12 +4,17 @@ | |||
| 4 | 4 | ||
| 5 | use defmt::{assert_eq, *}; | 5 | use defmt::{assert_eq, *}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_rp::bind_interrupts; | ||
| 7 | use embassy_rp::gpio::{Level, Output}; | 8 | use embassy_rp::gpio::{Level, Output}; |
| 8 | use embassy_rp::interrupt; | 9 | use embassy_rp::peripherals::UART0; |
| 9 | use embassy_rp::uart::{Async, Config, Error, Instance, Parity, Uart, UartRx}; | 10 | use embassy_rp::uart::{Async, Config, Error, Instance, InterruptHandler, Parity, Uart, UartRx}; |
| 10 | use embassy_time::{Duration, Timer}; | 11 | use embassy_time::{Duration, Timer}; |
| 11 | use {defmt_rtt as _, panic_probe as _}; | 12 | use {defmt_rtt as _, panic_probe as _}; |
| 12 | 13 | ||
| 14 | bind_interrupts!(struct Irqs { | ||
| 15 | UART0_IRQ => InterruptHandler<UART0>; | ||
| 16 | }); | ||
| 17 | |||
| 13 | async fn read<const N: usize>(uart: &mut Uart<'_, impl Instance, Async>) -> Result<[u8; N], Error> { | 18 | async fn read<const N: usize>(uart: &mut Uart<'_, impl Instance, Async>) -> Result<[u8; N], Error> { |
| 14 | let mut buf = [255; N]; | 19 | let mut buf = [255; N]; |
| 15 | uart.read(&mut buf).await?; | 20 | uart.read(&mut buf).await?; |
| @@ -51,7 +56,6 @@ async fn main(_spawner: Spawner) { | |||
| 51 | info!("Hello World!"); | 56 | info!("Hello World!"); |
| 52 | 57 | ||
| 53 | let (mut tx, mut rx, mut uart) = (p.PIN_0, p.PIN_1, p.UART0); | 58 | let (mut tx, mut rx, mut uart) = (p.PIN_0, p.PIN_1, p.UART0); |
| 54 | let mut irq = interrupt::take!(UART0_IRQ); | ||
| 55 | 59 | ||
| 56 | // We can't send too many bytes, they have to fit in the FIFO. | 60 | // We can't send too many bytes, they have to fit in the FIFO. |
| 57 | // This is because we aren't sending+receiving at the same time. | 61 | // This is because we aren't sending+receiving at the same time. |
| @@ -61,7 +65,7 @@ async fn main(_spawner: Spawner) { | |||
| 61 | &mut uart, | 65 | &mut uart, |
| 62 | &mut tx, | 66 | &mut tx, |
| 63 | &mut rx, | 67 | &mut rx, |
| 64 | &mut irq, | 68 | Irqs, |
| 65 | &mut p.DMA_CH0, | 69 | &mut p.DMA_CH0, |
| 66 | &mut p.DMA_CH1, | 70 | &mut p.DMA_CH1, |
| 67 | config, | 71 | config, |
| @@ -82,7 +86,7 @@ async fn main(_spawner: Spawner) { | |||
| 82 | &mut uart, | 86 | &mut uart, |
| 83 | &mut tx, | 87 | &mut tx, |
| 84 | &mut rx, | 88 | &mut rx, |
| 85 | &mut irq, | 89 | Irqs, |
| 86 | &mut p.DMA_CH0, | 90 | &mut p.DMA_CH0, |
| 87 | &mut p.DMA_CH1, | 91 | &mut p.DMA_CH1, |
| 88 | config, | 92 | config, |
| @@ -111,7 +115,7 @@ async fn main(_spawner: Spawner) { | |||
| 111 | &mut uart, | 115 | &mut uart, |
| 112 | &mut tx, | 116 | &mut tx, |
| 113 | &mut rx, | 117 | &mut rx, |
| 114 | &mut irq, | 118 | Irqs, |
| 115 | &mut p.DMA_CH0, | 119 | &mut p.DMA_CH0, |
| 116 | &mut p.DMA_CH1, | 120 | &mut p.DMA_CH1, |
| 117 | config, | 121 | config, |
| @@ -154,7 +158,7 @@ async fn main(_spawner: Spawner) { | |||
| 154 | let mut config = Config::default(); | 158 | let mut config = Config::default(); |
| 155 | config.baudrate = 1000; | 159 | config.baudrate = 1000; |
| 156 | config.parity = Parity::ParityEven; | 160 | config.parity = Parity::ParityEven; |
| 157 | let mut uart = UartRx::new(&mut uart, &mut rx, &mut irq, &mut p.DMA_CH0, config); | 161 | let mut uart = UartRx::new(&mut uart, &mut rx, Irqs, &mut p.DMA_CH0, config); |
| 158 | 162 | ||
| 159 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, parity: u32) { | 163 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, parity: u32) { |
| 160 | send(pin, v, Some(parity != 0)).await; | 164 | send(pin, v, Some(parity != 0)).await; |
| @@ -199,7 +203,7 @@ async fn main(_spawner: Spawner) { | |||
| 199 | // choose a very slow baud rate to make tests reliable even with O0 | 203 | // choose a very slow baud rate to make tests reliable even with O0 |
| 200 | let mut config = Config::default(); | 204 | let mut config = Config::default(); |
| 201 | config.baudrate = 1000; | 205 | config.baudrate = 1000; |
| 202 | let mut uart = UartRx::new(&mut uart, &mut rx, &mut irq, &mut p.DMA_CH0, config); | 206 | let mut uart = UartRx::new(&mut uart, &mut rx, Irqs, &mut p.DMA_CH0, config); |
| 203 | 207 | ||
| 204 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, good: bool) { | 208 | async fn chr(pin: &mut Output<'_, impl embassy_rp::gpio::Pin>, v: u8, good: bool) { |
| 205 | if good { | 209 | if good { |
diff --git a/tests/rp/src/bin/uart_upgrade.rs b/tests/rp/src/bin/uart_upgrade.rs index d8c9aecf6..8605bb1c5 100644 --- a/tests/rp/src/bin/uart_upgrade.rs +++ b/tests/rp/src/bin/uart_upgrade.rs | |||
| @@ -4,11 +4,16 @@ | |||
| 4 | 4 | ||
| 5 | use defmt::{assert_eq, *}; | 5 | use defmt::{assert_eq, *}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_rp::interrupt; | 7 | use embassy_rp::bind_interrupts; |
| 8 | use embassy_rp::uart::{Config, Uart}; | 8 | use embassy_rp::peripherals::UART0; |
| 9 | use embassy_rp::uart::{BufferedInterruptHandler, Config, Uart}; | ||
| 9 | use embedded_io::asynch::{Read, Write}; | 10 | use embedded_io::asynch::{Read, Write}; |
| 10 | use {defmt_rtt as _, panic_probe as _}; | 11 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 12 | ||
| 13 | bind_interrupts!(struct Irqs { | ||
| 14 | UART0_IRQ => BufferedInterruptHandler<UART0>; | ||
| 15 | }); | ||
| 16 | |||
| 12 | #[embassy_executor::main] | 17 | #[embassy_executor::main] |
| 13 | async fn main(_spawner: Spawner) { | 18 | async fn main(_spawner: Spawner) { |
| 14 | let p = embassy_rp::init(Default::default()); | 19 | let p = embassy_rp::init(Default::default()); |
| @@ -29,11 +34,10 @@ async fn main(_spawner: Spawner) { | |||
| 29 | uart.blocking_read(&mut buf).unwrap(); | 34 | uart.blocking_read(&mut buf).unwrap(); |
| 30 | assert_eq!(buf, data); | 35 | assert_eq!(buf, data); |
| 31 | 36 | ||
| 32 | let irq = interrupt::take!(UART0_IRQ); | ||
| 33 | let tx_buf = &mut [0u8; 16]; | 37 | let tx_buf = &mut [0u8; 16]; |
| 34 | let rx_buf = &mut [0u8; 16]; | 38 | let rx_buf = &mut [0u8; 16]; |
| 35 | 39 | ||
| 36 | let mut uart = uart.into_buffered(irq, tx_buf, rx_buf); | 40 | let mut uart = uart.into_buffered(Irqs, tx_buf, rx_buf); |
| 37 | 41 | ||
| 38 | // Make sure we send more bytes than fits in the FIFO, to test the actual | 42 | // Make sure we send more bytes than fits in the FIFO, to test the actual |
| 39 | // bufferedUart. | 43 | // bufferedUart. |
