aboutsummaryrefslogtreecommitdiff
path: root/examples/rp
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2023-05-15 15:59:30 +0000
committerGitHub <[email protected]>2023-05-15 15:59:30 +0000
commit1a87f7477abdb033d960a6af63c95a9e0575e670 (patch)
tree0523c59fe3ef2bd406d44ab414f2903c68a918b9 /examples/rp
parent2bf2e54db925e1d8845deb5eaea737b6add95402 (diff)
parent14a5d03af2a74eccaa9930bdf81eef43791a4b33 (diff)
Merge #1458
1458: rp: remove take!, add bind_interrupts! r=Dirbaio a=pennae both of the uart interrupts now check a flag that only the dma rx path ever sets (and now unsets again on drop) to return early if it's not as they expect. this is ... not our preferred solution, but if bind_interrupts *must* allow mutiple handlers to be specified then this is the only way we can think of that doesn't break uarts. Co-authored-by: pennae <[email protected]>
Diffstat (limited to 'examples/rp')
-rw-r--r--examples/rp/src/bin/adc.rs11
-rw-r--r--examples/rp/src/bin/i2c_async.rs12
-rw-r--r--examples/rp/src/bin/uart_buffered_split.rs11
-rw-r--r--examples/rp/src/bin/uart_unidir.rs16
-rw-r--r--examples/rp/src/bin/usb_ethernet.rs12
-rw-r--r--examples/rp/src/bin/usb_logger.rs11
-rw-r--r--examples/rp/src/bin/usb_serial.rs12
7 files changed, 52 insertions, 33 deletions
diff --git a/examples/rp/src/bin/adc.rs b/examples/rp/src/bin/adc.rs
index 4202fd394..7c2ca19f7 100644
--- a/examples/rp/src/bin/adc.rs
+++ b/examples/rp/src/bin/adc.rs
@@ -4,16 +4,19 @@
4 4
5use defmt::*; 5use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_rp::adc::{Adc, Config}; 7use embassy_rp::adc::{Adc, Config, InterruptHandler};
8use embassy_rp::interrupt; 8use embassy_rp::bind_interrupts;
9use embassy_time::{Duration, Timer}; 9use embassy_time::{Duration, Timer};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12bind_interrupts!(struct Irqs {
13 ADC_IRQ_FIFO => InterruptHandler;
14});
15
12#[embassy_executor::main] 16#[embassy_executor::main]
13async fn main(_spawner: Spawner) { 17async fn main(_spawner: Spawner) {
14 let p = embassy_rp::init(Default::default()); 18 let p = embassy_rp::init(Default::default());
15 let irq = interrupt::take!(ADC_IRQ_FIFO); 19 let mut adc = Adc::new(p.ADC, Irqs, Config::default());
16 let mut adc = Adc::new(p.ADC, irq, Config::default());
17 20
18 let mut p26 = p.PIN_26; 21 let mut p26 = p.PIN_26;
19 let mut p27 = p.PIN_27; 22 let mut p27 = p.PIN_27;
diff --git a/examples/rp/src/bin/i2c_async.rs b/examples/rp/src/bin/i2c_async.rs
index d1a2e3cd7..cf3cf742c 100644
--- a/examples/rp/src/bin/i2c_async.rs
+++ b/examples/rp/src/bin/i2c_async.rs
@@ -4,12 +4,17 @@
4 4
5use defmt::*; 5use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_rp::i2c::{self, Config}; 7use embassy_rp::bind_interrupts;
8use embassy_rp::interrupt; 8use embassy_rp::i2c::{self, Config, InterruptHandler};
9use embassy_rp::peripherals::I2C1;
9use embassy_time::{Duration, Timer}; 10use embassy_time::{Duration, Timer};
10use embedded_hal_async::i2c::I2c; 11use embedded_hal_async::i2c::I2c;
11use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
12 13
14bind_interrupts!(struct Irqs {
15 I2C1_IRQ => InterruptHandler<I2C1>;
16});
17
13#[allow(dead_code)] 18#[allow(dead_code)]
14mod mcp23017 { 19mod mcp23017 {
15 pub const ADDR: u8 = 0x20; // default addr 20 pub const ADDR: u8 = 0x20; // default addr
@@ -64,10 +69,9 @@ async fn main(_spawner: Spawner) {
64 69
65 let sda = p.PIN_14; 70 let sda = p.PIN_14;
66 let scl = p.PIN_15; 71 let scl = p.PIN_15;
67 let irq = interrupt::take!(I2C1_IRQ);
68 72
69 info!("set up i2c "); 73 info!("set up i2c ");
70 let mut i2c = i2c::I2c::new_async(p.I2C1, scl, sda, irq, Config::default()); 74 let mut i2c = i2c::I2c::new_async(p.I2C1, scl, sda, Irqs, Config::default());
71 75
72 use mcp23017::*; 76 use mcp23017::*;
73 77
diff --git a/examples/rp/src/bin/uart_buffered_split.rs b/examples/rp/src/bin/uart_buffered_split.rs
index a8a682274..d6f01b4de 100644
--- a/examples/rp/src/bin/uart_buffered_split.rs
+++ b/examples/rp/src/bin/uart_buffered_split.rs
@@ -5,13 +5,17 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_executor::_export::StaticCell; 7use embassy_executor::_export::StaticCell;
8use embassy_rp::interrupt; 8use embassy_rp::bind_interrupts;
9use embassy_rp::peripherals::UART0; 9use embassy_rp::peripherals::UART0;
10use embassy_rp::uart::{BufferedUart, BufferedUartRx, Config}; 10use embassy_rp::uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, Config};
11use embassy_time::{Duration, Timer}; 11use embassy_time::{Duration, Timer};
12use embedded_io::asynch::{Read, Write}; 12use embedded_io::asynch::{Read, Write};
13use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
14 14
15bind_interrupts!(struct Irqs {
16 UART0_IRQ => BufferedInterruptHandler<UART0>;
17});
18
15macro_rules! singleton { 19macro_rules! singleton {
16 ($val:expr) => {{ 20 ($val:expr) => {{
17 type T = impl Sized; 21 type T = impl Sized;
@@ -26,10 +30,9 @@ async fn main(spawner: Spawner) {
26 let p = embassy_rp::init(Default::default()); 30 let p = embassy_rp::init(Default::default());
27 let (tx_pin, rx_pin, uart) = (p.PIN_0, p.PIN_1, p.UART0); 31 let (tx_pin, rx_pin, uart) = (p.PIN_0, p.PIN_1, p.UART0);
28 32
29 let irq = interrupt::take!(UART0_IRQ);
30 let tx_buf = &mut singleton!([0u8; 16])[..]; 33 let tx_buf = &mut singleton!([0u8; 16])[..];
31 let rx_buf = &mut singleton!([0u8; 16])[..]; 34 let rx_buf = &mut singleton!([0u8; 16])[..];
32 let uart = BufferedUart::new(uart, irq, tx_pin, rx_pin, tx_buf, rx_buf, Config::default()); 35 let uart = BufferedUart::new(uart, Irqs, tx_pin, rx_pin, tx_buf, rx_buf, Config::default());
33 let (rx, mut tx) = uart.split(); 36 let (rx, mut tx) = uart.split();
34 37
35 unwrap!(spawner.spawn(reader(rx))); 38 unwrap!(spawner.spawn(reader(rx)));
diff --git a/examples/rp/src/bin/uart_unidir.rs b/examples/rp/src/bin/uart_unidir.rs
index 4119a309f..c0943a1b8 100644
--- a/examples/rp/src/bin/uart_unidir.rs
+++ b/examples/rp/src/bin/uart_unidir.rs
@@ -7,24 +7,22 @@
7 7
8use defmt::*; 8use defmt::*;
9use embassy_executor::Spawner; 9use embassy_executor::Spawner;
10use embassy_rp::interrupt; 10use embassy_rp::bind_interrupts;
11use embassy_rp::peripherals::UART1; 11use embassy_rp::peripherals::UART1;
12use embassy_rp::uart::{Async, Config, UartRx, UartTx}; 12use embassy_rp::uart::{Async, Config, InterruptHandler, UartRx, UartTx};
13use embassy_time::{Duration, Timer}; 13use embassy_time::{Duration, Timer};
14use {defmt_rtt as _, panic_probe as _}; 14use {defmt_rtt as _, panic_probe as _};
15 15
16bind_interrupts!(struct Irqs {
17 UART1_IRQ => InterruptHandler<UART1>;
18});
19
16#[embassy_executor::main] 20#[embassy_executor::main]
17async fn main(spawner: Spawner) { 21async fn main(spawner: Spawner) {
18 let p = embassy_rp::init(Default::default()); 22 let p = embassy_rp::init(Default::default());
19 23
20 let mut uart_tx = UartTx::new(p.UART0, p.PIN_0, p.DMA_CH0, Config::default()); 24 let mut uart_tx = UartTx::new(p.UART0, p.PIN_0, p.DMA_CH0, Config::default());
21 let uart_rx = UartRx::new( 25 let uart_rx = UartRx::new(p.UART1, p.PIN_5, Irqs, p.DMA_CH1, Config::default());
22 p.UART1,
23 p.PIN_5,
24 interrupt::take!(UART1_IRQ),
25 p.DMA_CH1,
26 Config::default(),
27 );
28 26
29 unwrap!(spawner.spawn(reader(uart_rx))); 27 unwrap!(spawner.spawn(reader(uart_rx)));
30 28
diff --git a/examples/rp/src/bin/usb_ethernet.rs b/examples/rp/src/bin/usb_ethernet.rs
index 431db63eb..38ff1620d 100644
--- a/examples/rp/src/bin/usb_ethernet.rs
+++ b/examples/rp/src/bin/usb_ethernet.rs
@@ -6,8 +6,9 @@ use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_net::tcp::TcpSocket; 7use embassy_net::tcp::TcpSocket;
8use embassy_net::{Stack, StackResources}; 8use embassy_net::{Stack, StackResources};
9use embassy_rp::usb::Driver; 9use embassy_rp::peripherals::USB;
10use embassy_rp::{interrupt, peripherals}; 10use embassy_rp::usb::{Driver, InterruptHandler};
11use embassy_rp::{bind_interrupts, peripherals};
11use embassy_usb::class::cdc_ncm::embassy_net::{Device, Runner, State as NetState}; 12use embassy_usb::class::cdc_ncm::embassy_net::{Device, Runner, State as NetState};
12use embassy_usb::class::cdc_ncm::{CdcNcmClass, State}; 13use embassy_usb::class::cdc_ncm::{CdcNcmClass, State};
13use embassy_usb::{Builder, Config, UsbDevice}; 14use embassy_usb::{Builder, Config, UsbDevice};
@@ -15,6 +16,10 @@ use embedded_io::asynch::Write;
15use static_cell::StaticCell; 16use static_cell::StaticCell;
16use {defmt_rtt as _, panic_probe as _}; 17use {defmt_rtt as _, panic_probe as _};
17 18
19bind_interrupts!(struct Irqs {
20 USBCTRL_IRQ => InterruptHandler<USB>;
21});
22
18type MyDriver = Driver<'static, peripherals::USB>; 23type MyDriver = Driver<'static, peripherals::USB>;
19 24
20macro_rules! singleton { 25macro_rules! singleton {
@@ -48,8 +53,7 @@ async fn main(spawner: Spawner) {
48 let p = embassy_rp::init(Default::default()); 53 let p = embassy_rp::init(Default::default());
49 54
50 // Create the driver, from the HAL. 55 // Create the driver, from the HAL.
51 let irq = interrupt::take!(USBCTRL_IRQ); 56 let driver = Driver::new(p.USB, Irqs);
52 let driver = Driver::new(p.USB, irq);
53 57
54 // Create embassy-usb Config 58 // Create embassy-usb Config
55 let mut config = Config::new(0xc0de, 0xcafe); 59 let mut config = Config::new(0xc0de, 0xcafe);
diff --git a/examples/rp/src/bin/usb_logger.rs b/examples/rp/src/bin/usb_logger.rs
index 52417a02e..7c90d0ca3 100644
--- a/examples/rp/src/bin/usb_logger.rs
+++ b/examples/rp/src/bin/usb_logger.rs
@@ -3,12 +3,16 @@
3#![feature(type_alias_impl_trait)] 3#![feature(type_alias_impl_trait)]
4 4
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_rp::interrupt; 6use embassy_rp::bind_interrupts;
7use embassy_rp::peripherals::USB; 7use embassy_rp::peripherals::USB;
8use embassy_rp::usb::Driver; 8use embassy_rp::usb::{Driver, InterruptHandler};
9use embassy_time::{Duration, Timer}; 9use embassy_time::{Duration, Timer};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12bind_interrupts!(struct Irqs {
13 USBCTRL_IRQ => InterruptHandler<USB>;
14});
15
12#[embassy_executor::task] 16#[embassy_executor::task]
13async fn logger_task(driver: Driver<'static, USB>) { 17async fn logger_task(driver: Driver<'static, USB>) {
14 embassy_usb_logger::run!(1024, log::LevelFilter::Info, driver); 18 embassy_usb_logger::run!(1024, log::LevelFilter::Info, driver);
@@ -17,8 +21,7 @@ async fn logger_task(driver: Driver<'static, USB>) {
17#[embassy_executor::main] 21#[embassy_executor::main]
18async fn main(spawner: Spawner) { 22async fn main(spawner: Spawner) {
19 let p = embassy_rp::init(Default::default()); 23 let p = embassy_rp::init(Default::default());
20 let irq = interrupt::take!(USBCTRL_IRQ); 24 let driver = Driver::new(p.USB, Irqs);
21 let driver = Driver::new(p.USB, irq);
22 spawner.spawn(logger_task(driver)).unwrap(); 25 spawner.spawn(logger_task(driver)).unwrap();
23 26
24 let mut counter = 0; 27 let mut counter = 0;
diff --git a/examples/rp/src/bin/usb_serial.rs b/examples/rp/src/bin/usb_serial.rs
index 8160a1875..ca728536c 100644
--- a/examples/rp/src/bin/usb_serial.rs
+++ b/examples/rp/src/bin/usb_serial.rs
@@ -5,13 +5,18 @@
5use defmt::{info, panic}; 5use defmt::{info, panic};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_futures::join::join; 7use embassy_futures::join::join;
8use embassy_rp::interrupt; 8use embassy_rp::bind_interrupts;
9use embassy_rp::usb::{Driver, Instance}; 9use embassy_rp::peripherals::USB;
10use embassy_rp::usb::{Driver, Instance, InterruptHandler};
10use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; 11use embassy_usb::class::cdc_acm::{CdcAcmClass, State};
11use embassy_usb::driver::EndpointError; 12use embassy_usb::driver::EndpointError;
12use embassy_usb::{Builder, Config}; 13use embassy_usb::{Builder, Config};
13use {defmt_rtt as _, panic_probe as _}; 14use {defmt_rtt as _, panic_probe as _};
14 15
16bind_interrupts!(struct Irqs {
17 USBCTRL_IRQ => InterruptHandler<USB>;
18});
19
15#[embassy_executor::main] 20#[embassy_executor::main]
16async fn main(_spawner: Spawner) { 21async fn main(_spawner: Spawner) {
17 info!("Hello there!"); 22 info!("Hello there!");
@@ -19,8 +24,7 @@ async fn main(_spawner: Spawner) {
19 let p = embassy_rp::init(Default::default()); 24 let p = embassy_rp::init(Default::default());
20 25
21 // Create the driver, from the HAL. 26 // Create the driver, from the HAL.
22 let irq = interrupt::take!(USBCTRL_IRQ); 27 let driver = Driver::new(p.USB, Irqs);
23 let driver = Driver::new(p.USB, irq);
24 28
25 // Create embassy-usb Config 29 // Create embassy-usb Config
26 let mut config = Config::new(0xc0de, 0xcafe); 30 let mut config = Config::new(0xc0de, 0xcafe);