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());
|
let (udint, udien, usbint) = (usb.udint.read(), usb.udien.read(), usb.usbint.read());
|
||||||
|
|
||||||
if usbint.vbusti().bit_is_set() {
|
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() {
|
if usb.usbsta.read().vbus().bit_is_set() {
|
||||||
return PollResult::Resume;
|
return PollResult::Resume;
|
||||||
|
@ -179,7 +180,8 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if udint.sofi().bit_is_set() {
|
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() {
|
if usb.usbcon.read().frzclk().bit_is_clear() {
|
||||||
|
@ -293,8 +295,13 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
||||||
|
|
||||||
// Clear resume informations. //
|
// Clear resume informations. //
|
||||||
|
|
||||||
usb.udint
|
usb.udint.write(|w| {
|
||||||
.write(|w| w.wakeupi().clear_bit().suspi().clear_bit());
|
unsafe { w.bits(UDINT_CLEAR) }
|
||||||
|
.wakeupi()
|
||||||
|
.clear_bit()
|
||||||
|
.suspi()
|
||||||
|
.clear_bit()
|
||||||
|
});
|
||||||
|
|
||||||
usb.udien
|
usb.udien
|
||||||
.modify(|_, w| w.wakeupe().clear_bit().suspe().set_bit());
|
.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.usbcon.modify(|_, w| w.frzclk().clear_bit());
|
||||||
|
|
||||||
usb.udint
|
usb.udint.write(|w| {
|
||||||
.write(|w| w.wakeupi().clear_bit().suspi().clear_bit());
|
unsafe { w.bits(UDINT_CLEAR) }
|
||||||
|
.wakeupi()
|
||||||
|
.clear_bit()
|
||||||
|
.suspi()
|
||||||
|
.clear_bit()
|
||||||
|
});
|
||||||
|
|
||||||
usb.udien
|
usb.udien
|
||||||
.modify(|_, w| w.wakeupe().clear_bit().suspe().set_bit());
|
.modify(|_, w| w.wakeupe().clear_bit().suspe().set_bit());
|
||||||
|
@ -355,8 +367,13 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
||||||
free(|cs| {
|
free(|cs| {
|
||||||
let (usb, pll) = (self.usb.borrow(cs), self.pll.borrow(cs));
|
let (usb, pll) = (self.usb.borrow(cs), self.pll.borrow(cs));
|
||||||
|
|
||||||
usb.udint
|
usb.udint.write(|w| {
|
||||||
.write(|w| w.wakeupi().clear_bit().suspi().clear_bit());
|
unsafe { w.bits(UDINT_CLEAR) }
|
||||||
|
.wakeupi()
|
||||||
|
.clear_bit()
|
||||||
|
.suspi()
|
||||||
|
.clear_bit()
|
||||||
|
});
|
||||||
|
|
||||||
// Suspend. //
|
// Suspend. //
|
||||||
|
|
||||||
|
@ -440,3 +457,5 @@ impl<const L: usize> UsbBus for UsbDevice<L> {
|
||||||
}
|
}
|
||||||
|
|
||||||
const RESTRICT_RW_FLAG: u8 = !(1 << 5);
|
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