diff --git a/src/types/usb_device.rs b/src/types/usb_device.rs index b31d7cb..de2cef9 100644 --- a/src/types/usb_device.rs +++ b/src/types/usb_device.rs @@ -81,6 +81,34 @@ pub(crate) const DPRAM_SIZE: u16 = 832; pub(crate) const ENDPOINTS_ALLOC_LAYOUT: [u16; MAX_ENDPOINTS] = [64, 256, 64, 64, 64, 64, 64]; pub(crate) const ONE_MS_16_MGHZ: u32 = 16000; +const UDINT_BYTE: u8 = 0x7d; +const USBINT_BYTE: u8 = 0x01; +const UEINTX_BYTE: u8 = 0xdf; +pub(crate) trait InterruptCleaner { + fn clear_interrupts(&mut self) -> &mut Self; +} + +impl InterruptCleaner for UDINTWriter { + #[inline] + fn clear_interrupts(&mut self) -> &mut Self { + unsafe { self.bits(UDINT_BYTE) } + } +} + +impl InterruptCleaner for USBINTWriter { + #[inline] + fn clear_interrupts(&mut self) -> &mut Self { + unsafe { self.bits(USBINT_BYTE) } + } +} + +impl InterruptCleaner for UEINTXWriter { + #[inline] + fn clear_interrupts(&mut self) -> &mut Self { + unsafe { self.bits(UEINTX_BYTE) } + } +} + impl UsbDevice { #[inline] pub(crate) fn get_size(&self, cs: CriticalSection<'_>) -> usize {