feat(interrupt): add interrupt cleaner

This commit is contained in:
doryan 2025-02-14 00:08:45 +04:00
parent 8416bd0fa4
commit 18a3368565

View File

@ -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<const L: usize> UsbDevice<L> {
#[inline]
pub(crate) fn get_size(&self, cs: CriticalSection<'_>) -> usize {