diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-05-15 15:59:30 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-15 15:59:30 +0000 |
| commit | 1a87f7477abdb033d960a6af63c95a9e0575e670 (patch) | |
| tree | 0523c59fe3ef2bd406d44ab414f2903c68a918b9 /examples/rp | |
| parent | 2bf2e54db925e1d8845deb5eaea737b6add95402 (diff) | |
| parent | 14a5d03af2a74eccaa9930bdf81eef43791a4b33 (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.rs | 11 | ||||
| -rw-r--r-- | examples/rp/src/bin/i2c_async.rs | 12 | ||||
| -rw-r--r-- | examples/rp/src/bin/uart_buffered_split.rs | 11 | ||||
| -rw-r--r-- | examples/rp/src/bin/uart_unidir.rs | 16 | ||||
| -rw-r--r-- | examples/rp/src/bin/usb_ethernet.rs | 12 | ||||
| -rw-r--r-- | examples/rp/src/bin/usb_logger.rs | 11 | ||||
| -rw-r--r-- | examples/rp/src/bin/usb_serial.rs | 12 |
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 | ||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_rp::adc::{Adc, Config}; | 7 | use embassy_rp::adc::{Adc, Config, InterruptHandler}; |
| 8 | use embassy_rp::interrupt; | 8 | use embassy_rp::bind_interrupts; |
| 9 | use embassy_time::{Duration, Timer}; | 9 | use embassy_time::{Duration, Timer}; |
| 10 | use {defmt_rtt as _, panic_probe as _}; | 10 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 11 | ||
| 12 | bind_interrupts!(struct Irqs { | ||
| 13 | ADC_IRQ_FIFO => InterruptHandler; | ||
| 14 | }); | ||
| 15 | |||
| 12 | #[embassy_executor::main] | 16 | #[embassy_executor::main] |
| 13 | async fn main(_spawner: Spawner) { | 17 | async 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 | ||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_rp::i2c::{self, Config}; | 7 | use embassy_rp::bind_interrupts; |
| 8 | use embassy_rp::interrupt; | 8 | use embassy_rp::i2c::{self, Config, InterruptHandler}; |
| 9 | use embassy_rp::peripherals::I2C1; | ||
| 9 | use embassy_time::{Duration, Timer}; | 10 | use embassy_time::{Duration, Timer}; |
| 10 | use embedded_hal_async::i2c::I2c; | 11 | use embedded_hal_async::i2c::I2c; |
| 11 | use {defmt_rtt as _, panic_probe as _}; | 12 | use {defmt_rtt as _, panic_probe as _}; |
| 12 | 13 | ||
| 14 | bind_interrupts!(struct Irqs { | ||
| 15 | I2C1_IRQ => InterruptHandler<I2C1>; | ||
| 16 | }); | ||
| 17 | |||
| 13 | #[allow(dead_code)] | 18 | #[allow(dead_code)] |
| 14 | mod mcp23017 { | 19 | mod 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 @@ | |||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_executor::_export::StaticCell; | 7 | use embassy_executor::_export::StaticCell; |
| 8 | use embassy_rp::interrupt; | 8 | use embassy_rp::bind_interrupts; |
| 9 | use embassy_rp::peripherals::UART0; | 9 | use embassy_rp::peripherals::UART0; |
| 10 | use embassy_rp::uart::{BufferedUart, BufferedUartRx, Config}; | 10 | use embassy_rp::uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, Config}; |
| 11 | use embassy_time::{Duration, Timer}; | 11 | use embassy_time::{Duration, Timer}; |
| 12 | use embedded_io::asynch::{Read, Write}; | 12 | use embedded_io::asynch::{Read, Write}; |
| 13 | use {defmt_rtt as _, panic_probe as _}; | 13 | use {defmt_rtt as _, panic_probe as _}; |
| 14 | 14 | ||
| 15 | bind_interrupts!(struct Irqs { | ||
| 16 | UART0_IRQ => BufferedInterruptHandler<UART0>; | ||
| 17 | }); | ||
| 18 | |||
| 15 | macro_rules! singleton { | 19 | macro_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 | ||
| 8 | use defmt::*; | 8 | use defmt::*; |
| 9 | use embassy_executor::Spawner; | 9 | use embassy_executor::Spawner; |
| 10 | use embassy_rp::interrupt; | 10 | use embassy_rp::bind_interrupts; |
| 11 | use embassy_rp::peripherals::UART1; | 11 | use embassy_rp::peripherals::UART1; |
| 12 | use embassy_rp::uart::{Async, Config, UartRx, UartTx}; | 12 | use embassy_rp::uart::{Async, Config, InterruptHandler, UartRx, UartTx}; |
| 13 | use embassy_time::{Duration, Timer}; | 13 | use embassy_time::{Duration, Timer}; |
| 14 | use {defmt_rtt as _, panic_probe as _}; | 14 | use {defmt_rtt as _, panic_probe as _}; |
| 15 | 15 | ||
| 16 | bind_interrupts!(struct Irqs { | ||
| 17 | UART1_IRQ => InterruptHandler<UART1>; | ||
| 18 | }); | ||
| 19 | |||
| 16 | #[embassy_executor::main] | 20 | #[embassy_executor::main] |
| 17 | async fn main(spawner: Spawner) { | 21 | async 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::*; | |||
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_net::tcp::TcpSocket; | 7 | use embassy_net::tcp::TcpSocket; |
| 8 | use embassy_net::{Stack, StackResources}; | 8 | use embassy_net::{Stack, StackResources}; |
| 9 | use embassy_rp::usb::Driver; | 9 | use embassy_rp::peripherals::USB; |
| 10 | use embassy_rp::{interrupt, peripherals}; | 10 | use embassy_rp::usb::{Driver, InterruptHandler}; |
| 11 | use embassy_rp::{bind_interrupts, peripherals}; | ||
| 11 | use embassy_usb::class::cdc_ncm::embassy_net::{Device, Runner, State as NetState}; | 12 | use embassy_usb::class::cdc_ncm::embassy_net::{Device, Runner, State as NetState}; |
| 12 | use embassy_usb::class::cdc_ncm::{CdcNcmClass, State}; | 13 | use embassy_usb::class::cdc_ncm::{CdcNcmClass, State}; |
| 13 | use embassy_usb::{Builder, Config, UsbDevice}; | 14 | use embassy_usb::{Builder, Config, UsbDevice}; |
| @@ -15,6 +16,10 @@ use embedded_io::asynch::Write; | |||
| 15 | use static_cell::StaticCell; | 16 | use static_cell::StaticCell; |
| 16 | use {defmt_rtt as _, panic_probe as _}; | 17 | use {defmt_rtt as _, panic_probe as _}; |
| 17 | 18 | ||
| 19 | bind_interrupts!(struct Irqs { | ||
| 20 | USBCTRL_IRQ => InterruptHandler<USB>; | ||
| 21 | }); | ||
| 22 | |||
| 18 | type MyDriver = Driver<'static, peripherals::USB>; | 23 | type MyDriver = Driver<'static, peripherals::USB>; |
| 19 | 24 | ||
| 20 | macro_rules! singleton { | 25 | macro_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 | ||
| 5 | use embassy_executor::Spawner; | 5 | use embassy_executor::Spawner; |
| 6 | use embassy_rp::interrupt; | 6 | use embassy_rp::bind_interrupts; |
| 7 | use embassy_rp::peripherals::USB; | 7 | use embassy_rp::peripherals::USB; |
| 8 | use embassy_rp::usb::Driver; | 8 | use embassy_rp::usb::{Driver, InterruptHandler}; |
| 9 | use embassy_time::{Duration, Timer}; | 9 | use embassy_time::{Duration, Timer}; |
| 10 | use {defmt_rtt as _, panic_probe as _}; | 10 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 11 | ||
| 12 | bind_interrupts!(struct Irqs { | ||
| 13 | USBCTRL_IRQ => InterruptHandler<USB>; | ||
| 14 | }); | ||
| 15 | |||
| 12 | #[embassy_executor::task] | 16 | #[embassy_executor::task] |
| 13 | async fn logger_task(driver: Driver<'static, USB>) { | 17 | async 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] |
| 18 | async fn main(spawner: Spawner) { | 22 | async 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 @@ | |||
| 5 | use defmt::{info, panic}; | 5 | use defmt::{info, panic}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_futures::join::join; | 7 | use embassy_futures::join::join; |
| 8 | use embassy_rp::interrupt; | 8 | use embassy_rp::bind_interrupts; |
| 9 | use embassy_rp::usb::{Driver, Instance}; | 9 | use embassy_rp::peripherals::USB; |
| 10 | use embassy_rp::usb::{Driver, Instance, InterruptHandler}; | ||
| 10 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; | 11 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; |
| 11 | use embassy_usb::driver::EndpointError; | 12 | use embassy_usb::driver::EndpointError; |
| 12 | use embassy_usb::{Builder, Config}; | 13 | use embassy_usb::{Builder, Config}; |
| 13 | use {defmt_rtt as _, panic_probe as _}; | 14 | use {defmt_rtt as _, panic_probe as _}; |
| 14 | 15 | ||
| 16 | bind_interrupts!(struct Irqs { | ||
| 17 | USBCTRL_IRQ => InterruptHandler<USB>; | ||
| 18 | }); | ||
| 19 | |||
| 15 | #[embassy_executor::main] | 20 | #[embassy_executor::main] |
| 16 | async fn main(_spawner: Spawner) { | 21 | async 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); |
