summaryrefslogtreecommitdiff
path: root/embassy-stm32/src/usb/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-stm32/src/usb/mod.rs')
-rw-r--r--embassy-stm32/src/usb/mod.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/embassy-stm32/src/usb/mod.rs b/embassy-stm32/src/usb/mod.rs
new file mode 100644
index 00000000..71b407cb
--- /dev/null
+++ b/embassy-stm32/src/usb/mod.rs
@@ -0,0 +1,36 @@
+use embassy::interrupt::Interrupt;
+
+use crate::rcc::RccPeripheral;
+
+#[cfg(feature = "nightly")]
+mod usb;
+#[cfg(feature = "nightly")]
+pub use usb::*;
+
+pub(crate) mod sealed {
+ pub trait Instance {
+ fn regs() -> crate::pac::usb::Usb;
+ }
+}
+
+pub trait Instance: sealed::Instance + RccPeripheral + 'static {
+ type Interrupt: Interrupt;
+}
+
+// Internal PHY pins
+pin_trait!(DpPin, Instance);
+pin_trait!(DmPin, Instance);
+
+foreach_interrupt!(
+ ($inst:ident, usb, $block:ident, LP, $irq:ident) => {
+ impl sealed::Instance for crate::peripherals::$inst {
+ fn regs() -> crate::pac::usb::Usb {
+ crate::pac::$inst
+ }
+ }
+
+ impl Instance for crate::peripherals::$inst {
+ type Interrupt = crate::interrupt::$irq;
+ }
+ };
+);