- 
                Notifications
    You must be signed in to change notification settings 
- Fork 49
Open
Description
I've been working on getting a simple USBD CDC device going on ch32v203. The existing driver (based on stm32) is mostly working, but there are a few deficiencies that I have discovered:
- The driver does not enable its interrupt, this is a simple patch (or can be done in the application code via the PAC, but I don't think that is the idiom)
diff --git a/src/usbd.rs b/src/usbd.rs
index 55cdf97..aa26946 100644
--- a/src/usbd.rs
+++ b/src/usbd.rs
@@ -417,6 +417,11 @@ impl<'d, T: Instance> driver::Driver<'d> for Driver<'d, T> {
             w.set_ctrm(true);
         });
 
+        unsafe {
+            use interrupt::typelevel::Interrupt;
+            T::Interrupt::enable()
+        };
+
         crate::println!("enabled");
 
         let mut ep_types = [EpType::BULK; EP_COUNT - 1];
- Wake from sleep does not work properly; this might also just require twiddling some bits, but I couldn't figure it out, manually setting up the USB wake event in EXTI didn't seem to help. Using embassy-executorfeaturearch-spininstead ofarch-riscv32works.
- The SDI printlns throughout the driver cause frequent enumeration failure when a probe is connected and hang completely when one is not.
With these changes I was able to port with very few changes the stm32u0 usb_serial example, and it works.
It is unfortunate that the USBD is connected to a type-A port on the ch32v203 eval board.
Metadata
Metadata
Assignees
Labels
No labels