Просмотр исходного кода

remove unnecessary blocking operation.
add comments why resume event is sent manually.

kkitayam 4 лет назад
Родитель
Сommit
1ff3b76451
1 измененных файлов с 5 добавлено и 1 удалено
  1. 5 1
      src/portable/renesas/usba/dcd_usba.c

+ 5 - 1
src/portable/renesas/usba/dcd_usba.c

@@ -553,7 +553,6 @@ void dcd_remote_wakeup(uint8_t rhport)
 {
   (void)rhport;
   USB0.DVSTCTR0.BIT.WKUP = 1;
-  while (USB0.DVSTCTR0.BIT.WKUP) ;
 }
 
 void dcd_connect(uint8_t rhport)
@@ -701,6 +700,11 @@ void dcd_int_handler(uint8_t rhport)
   }
   if (is0 & USB_IS0_SOFR) {
     if (_dcd.suspended) {
+      /* When USB host resumes caused by `dcd_remote_wakeup()`,
+       * RESM interrupt does not rise.
+       * Therefore we need to manually send resume event.
+       * Of course, when USB host resumes on its own,
+       * RESM interrupt rise properly, then this statements are ignored. */
       dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
       _dcd.suspended = 0;
     }