FIx recurrent suspend ISR.
This commit is contained in:
@@ -431,7 +431,7 @@ bool dcd_init(uint8_t rhport, const tusb_rhport_init_t* rh_init) {
|
||||
#endif
|
||||
|
||||
// Enable required interrupts
|
||||
dwc2->gintmsk |= GINTMSK_OTGINT | GINTMSK_USBSUSPM | GINTMSK_USBRST | GINTMSK_ENUMDNEM | GINTMSK_WUIM;
|
||||
dwc2->gintmsk |= GINTMSK_OTGINT | GINTMSK_USBRST | GINTMSK_ENUMDNEM | GINTMSK_WUIM;
|
||||
|
||||
// TX FIFO empty level for interrupt is complete empty
|
||||
uint32_t gahbcfg = dwc2->gahbcfg;
|
||||
@@ -1032,16 +1032,19 @@ void dcd_int_handler(uint8_t rhport) {
|
||||
if (gintsts & GINTSTS_ENUMDNE) {
|
||||
// ENUMDNE is the end of reset where speed of the link is detected
|
||||
dwc2->gintsts = GINTSTS_ENUMDNE;
|
||||
dwc2->gintmsk |= GINTMSK_USBSUSPM;
|
||||
handle_enum_done(rhport);
|
||||
}
|
||||
|
||||
if (gintsts & GINTSTS_USBSUSP) {
|
||||
dwc2->gintsts = GINTSTS_USBSUSP;
|
||||
dwc2->gintmsk &= ~GINTMSK_USBSUSPM;
|
||||
dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
|
||||
}
|
||||
|
||||
if (gintsts & GINTSTS_WKUINT) {
|
||||
dwc2->gintsts = GINTSTS_WKUINT;
|
||||
dwc2->gintmsk |= GINTMSK_USBSUSPM;
|
||||
dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
|
||||
}
|
||||
|
||||
@@ -1061,6 +1064,7 @@ void dcd_int_handler(uint8_t rhport) {
|
||||
|
||||
if(gintsts & GINTSTS_SOF) {
|
||||
dwc2->gintsts = GINTSTS_SOF;
|
||||
dwc2->gintmsk |= GINTMSK_USBSUSPM;
|
||||
const uint32_t frame = (dwc2->dsts & DSTS_FNSOF) >> DSTS_FNSOF_Pos;
|
||||
|
||||
// Disable SOF interrupt if SOF was not explicitly enabled since SOF was used for remote wakeup detection
|
||||
|
Reference in New Issue
Block a user