From 30850a473db2b1e36b1c51ad6784d49b90f9443e Mon Sep 17 00:00:00 2001 From: doryan Date: Thu, 13 Feb 2025 00:29:02 +0400 Subject: [PATCH] fix: add clearing interrupts --- src/lib.rs | 67 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0e47101..64604a0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -161,9 +161,8 @@ impl UsbBus for UsbDevice { let (udint, udien, usbint) = (usb.udint.read(), usb.udien.read(), usb.usbint.read()); if usbint.vbusti().bit_is_set() { - usb.usbint.write(|w| - // unsafe { w.bits(0x01) } - w.vbusti().clear_bit()); + usb.usbint + .write(|w| unsafe { w.bits(0x01) }.vbusti().clear_bit()); if usb.usbsta.read().vbus().bit_is_set() { return PollResult::Resume; } else { @@ -184,9 +183,8 @@ impl UsbBus for UsbDevice { } if udint.sofi().bit_is_set() { - usb.udint.write(|w| - // unsafe { w.bits(0x7d) } - w.sofi().clear_bit()); + usb.udint + .write(|w| unsafe { w.bits(0x7d) }.sofi().clear_bit()); } if usb.usbcon.read().frzclk().bit_is_clear() { @@ -250,8 +248,11 @@ impl UsbBus for UsbDevice { } usb.ueintx.write(|w| { - /* unsafe { w.bits(0xdf) } */ - w.rxouti().clear_bit().rxstpi().clear_bit() + unsafe { w.bits(0xdf) } + .rxouti() + .clear_bit() + .rxstpi() + .clear_bit() }); Ok(buf_size) @@ -259,9 +260,8 @@ impl UsbBus for UsbDevice { if usb.ueintx.read().rxouti().bit_is_clear() { return Err(UsbError::WouldBlock); } - usb.ueintx.write(|w| - // unsafe { w.bits(0xdf) } - w.rxouti().clear_bit()); + usb.ueintx + .write(|w| unsafe { w.bits(0xdf) }.rxouti().clear_bit()); let mut bytes_read = 0; for slot in buf { @@ -276,9 +276,8 @@ impl UsbBus for UsbDevice { return Err(UsbError::BufferOverflow); } - usb.ueintx.write(|w| - // unsafe { w.bits(0xdf) } - w.fifocon().clear_bit()); + usb.ueintx + .write(|w| unsafe { w.bits(0xdf) }.fifocon().clear_bit()); Ok(bytes_read) } } @@ -298,8 +297,11 @@ impl UsbBus for UsbDevice { // Clear resume informations. // usb.udint.write(|w| { - // unsafe { w.bits(0x7d) } - w.wakeupi().clear_bit().suspi().clear_bit() + unsafe { w.bits(0x7d) } + .wakeupi() + .clear_bit() + .suspi() + .clear_bit() }); usb.udien @@ -323,8 +325,11 @@ impl UsbBus for UsbDevice { usb.usbcon.modify(|_, w| w.frzclk().clear_bit()); usb.udint.write(|w| { - // unsafe { w.bits(0x7d) } - w.wakeupi().clear_bit().suspi().clear_bit() + unsafe { w.bits(0x7d) } + .wakeupi() + .clear_bit() + .suspi() + .clear_bit() }); usb.udien @@ -364,8 +369,11 @@ impl UsbBus for UsbDevice { let (usb, pll) = (self.usb.borrow(cs), self.pll.borrow(cs)); usb.udint.write(|w| { - // unsafe { w.bits(0x7d) } - w.wakeupi().clear_bit().suspi().clear_bit() + unsafe { w.bits(0x7d) } + .wakeupi() + .clear_bit() + .suspi() + .clear_bit() }); // Suspend. // @@ -407,16 +415,18 @@ impl UsbBus for UsbDevice { usb.uedatx.write(|w| w.bits(byte)); } - usb.ueintx.write(|w| - // unsafe { w.bits(0xdf) } - w.txini().clear_bit()); + usb.ueintx + .write(|w| unsafe { w.bits(0xdf) }.txini().clear_bit()); } else { if usb.ueintx.read().txini().bit_is_clear() { return Err(UsbError::WouldBlock); } usb.ueintx.write(|w| { - // unsafe { w.bits(0xdf) } - w.txini().clear_bit().rxouti().clear_bit() + unsafe { w.bits(0xdf) } + .txini() + .clear_bit() + .rxouti() + .clear_bit() }); for &byte in buf { @@ -428,8 +438,11 @@ impl UsbBus for UsbDevice { } usb.ueintx.write(|w| { - // unsafe { w.bits(0xdf) } - w.rxouti().clear_bit().fifocon().clear_bit() + unsafe { w.bits(0xdf) } + .rxouti() + .clear_bit() + .fifocon() + .clear_bit() }); }