fix: add clearing interrupts
This commit is contained in:
parent
64a6532c94
commit
93ade5bda0
35
src/lib.rs
35
src/lib.rs
|
@ -157,7 +157,8 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
|||
let (udint, udien, usbint) = (usb.udint.read(), usb.udien.read(), usb.usbint.read());
|
||||
|
||||
if usbint.vbusti().bit_is_set() {
|
||||
usb.usbint.write(|w| w.vbusti().clear_bit());
|
||||
usb.usbint
|
||||
.write(|w| unsafe { w.bits(USBINT_CLEAR) }.vbusti().clear_bit());
|
||||
|
||||
if usb.usbsta.read().vbus().bit_is_set() {
|
||||
return PollResult::Resume;
|
||||
|
@ -179,7 +180,8 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
|||
}
|
||||
|
||||
if udint.sofi().bit_is_set() {
|
||||
usb.udint.write(|w| w.sofi().clear_bit());
|
||||
usb.udint
|
||||
.write(|w| unsafe { w.bits(UDINT_CLEAR) }.sofi().clear_bit());
|
||||
}
|
||||
|
||||
if usb.usbcon.read().frzclk().bit_is_clear() {
|
||||
|
@ -293,8 +295,13 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
|||
|
||||
// Clear resume informations. //
|
||||
|
||||
usb.udint
|
||||
.write(|w| w.wakeupi().clear_bit().suspi().clear_bit());
|
||||
usb.udint.write(|w| {
|
||||
unsafe { w.bits(UDINT_CLEAR) }
|
||||
.wakeupi()
|
||||
.clear_bit()
|
||||
.suspi()
|
||||
.clear_bit()
|
||||
});
|
||||
|
||||
usb.udien
|
||||
.modify(|_, w| w.wakeupe().clear_bit().suspe().set_bit());
|
||||
|
@ -316,8 +323,13 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
|||
|
||||
usb.usbcon.modify(|_, w| w.frzclk().clear_bit());
|
||||
|
||||
usb.udint
|
||||
.write(|w| w.wakeupi().clear_bit().suspi().clear_bit());
|
||||
usb.udint.write(|w| {
|
||||
unsafe { w.bits(UDINT_CLEAR) }
|
||||
.wakeupi()
|
||||
.clear_bit()
|
||||
.suspi()
|
||||
.clear_bit()
|
||||
});
|
||||
|
||||
usb.udien
|
||||
.modify(|_, w| w.wakeupe().clear_bit().suspe().set_bit());
|
||||
|
@ -355,8 +367,13 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
|||
free(|cs| {
|
||||
let (usb, pll) = (self.usb.borrow(cs), self.pll.borrow(cs));
|
||||
|
||||
usb.udint
|
||||
.write(|w| w.wakeupi().clear_bit().suspi().clear_bit());
|
||||
usb.udint.write(|w| {
|
||||
unsafe { w.bits(UDINT_CLEAR) }
|
||||
.wakeupi()
|
||||
.clear_bit()
|
||||
.suspi()
|
||||
.clear_bit()
|
||||
});
|
||||
|
||||
// Suspend. //
|
||||
|
||||
|
@ -440,3 +457,5 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
|||
}
|
||||
|
||||
const RESTRICT_RW_FLAG: u8 = !(1 << 5);
|
||||
const USBINT_CLEAR: u8 = !(1 << 0);
|
||||
const UDINT_CLEAR: u8 = !(1 << 1 | 1 << 7);
|
||||
|
|
Loading…
Reference in New Issue