aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp/src/pio.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-rp/src/pio.rs')
-rw-r--r--embassy-rp/src/pio.rs16
1 files changed, 9 insertions, 7 deletions
diff --git a/embassy-rp/src/pio.rs b/embassy-rp/src/pio.rs
index 93e5bd34b..0fa3bd771 100644
--- a/embassy-rp/src/pio.rs
+++ b/embassy-rp/src/pio.rs
@@ -5,7 +5,6 @@ use core::sync::atomic::{compiler_fence, Ordering};
5use core::task::{Context, Poll}; 5use core::task::{Context, Poll};
6 6
7use atomic_polyfill::{AtomicU32, AtomicU8}; 7use atomic_polyfill::{AtomicU32, AtomicU8};
8use embassy_cortex_m::interrupt::Interrupt;
9use embassy_hal_common::{into_ref, Peripheral, PeripheralRef}; 8use embassy_hal_common::{into_ref, Peripheral, PeripheralRef};
10use embassy_sync::waitqueue::AtomicWaker; 9use embassy_sync::waitqueue::AtomicWaker;
11use fixed::types::extra::U8; 10use fixed::types::extra::U8;
@@ -17,6 +16,7 @@ use pio::{SideSet, Wrap};
17use crate::dma::{Channel, Transfer, Word}; 16use crate::dma::{Channel, Transfer, Word};
18use crate::gpio::sealed::Pin as SealedPin; 17use crate::gpio::sealed::Pin as SealedPin;
19use crate::gpio::{self, AnyPin, Drive, Level, Pull, SlewRate}; 18use crate::gpio::{self, AnyPin, Drive, Level, Pull, SlewRate};
19use crate::interrupt::InterruptExt;
20use crate::pac::dma::vals::TreqSel; 20use crate::pac::dma::vals::TreqSel;
21use crate::relocate::RelocatedProgram; 21use crate::relocate::RelocatedProgram;
22use crate::{interrupt, pac, peripherals, pio_instr_util, RegExt}; 22use crate::{interrupt, pac, peripherals, pio_instr_util, RegExt};
@@ -85,6 +85,7 @@ const RXNEMPTY_MASK: u32 = 1 << 0;
85const TXNFULL_MASK: u32 = 1 << 4; 85const TXNFULL_MASK: u32 = 1 << 4;
86const SMIRQ_MASK: u32 = 1 << 8; 86const SMIRQ_MASK: u32 = 1 << 8;
87 87
88#[cfg(feature = "rt")]
88#[interrupt] 89#[interrupt]
89unsafe fn PIO0_IRQ_0() { 90unsafe fn PIO0_IRQ_0() {
90 use crate::pac; 91 use crate::pac;
@@ -97,6 +98,7 @@ unsafe fn PIO0_IRQ_0() {
97 pac::PIO0.irqs(0).inte().write_clear(|m| m.0 = ints); 98 pac::PIO0.irqs(0).inte().write_clear(|m| m.0 = ints);
98} 99}
99 100
101#[cfg(feature = "rt")]
100#[interrupt] 102#[interrupt]
101unsafe fn PIO1_IRQ_0() { 103unsafe fn PIO1_IRQ_0() {
102 use crate::pac; 104 use crate::pac;
@@ -110,15 +112,15 @@ unsafe fn PIO1_IRQ_0() {
110} 112}
111 113
112pub(crate) unsafe fn init() { 114pub(crate) unsafe fn init() {
113 interrupt::PIO0_IRQ_0::disable(); 115 interrupt::PIO0_IRQ_0.disable();
114 interrupt::PIO0_IRQ_0::set_priority(interrupt::Priority::P3); 116 interrupt::PIO0_IRQ_0.set_priority(interrupt::Priority::P3);
115 pac::PIO0.irqs(0).inte().write(|m| m.0 = 0); 117 pac::PIO0.irqs(0).inte().write(|m| m.0 = 0);
116 interrupt::PIO0_IRQ_0::enable(); 118 interrupt::PIO0_IRQ_0.enable();
117 119
118 interrupt::PIO1_IRQ_0::disable(); 120 interrupt::PIO1_IRQ_0.disable();
119 interrupt::PIO1_IRQ_0::set_priority(interrupt::Priority::P3); 121 interrupt::PIO1_IRQ_0.set_priority(interrupt::Priority::P3);
120 pac::PIO1.irqs(0).inte().write(|m| m.0 = 0); 122 pac::PIO1.irqs(0).inte().write(|m| m.0 = 0);
121 interrupt::PIO1_IRQ_0::enable(); 123 interrupt::PIO1_IRQ_0.enable();
122} 124}
123 125
124/// Future that waits for TX-FIFO to become writable 126/// Future that waits for TX-FIFO to become writable