Explorar el Código

Fix hcd_edpt_clear_stall

kkitayam hace 4 años
padre
commit
2b8b8a3a97
Se han modificado 1 ficheros con 7 adiciones y 9 borrados
  1. 7 9
      src/portable/renesas/usba/hcd_usba.c

+ 7 - 9
src/portable/renesas/usba/hcd_usba.c

@@ -765,19 +765,17 @@ bool hcd_edpt_clear_stall(uint8_t dev_addr, uint8_t ep_addr)
 {
   uint16_t volatile *ctr = addr_to_pipectr(dev_addr, ep_addr);
   TU_ASSERT(ctr);
+
+  const uint32_t pid = *ctr & 0x3;
+  if (pid & 2) {
+    *ctr = pid & 2;
+    *ctr = 0;
+  }
   *ctr = USB_PIPECTR_SQCLR;
   unsigned const epn = tu_edpt_number(ep_addr);
   if (!epn) return true;
 
-  if (tu_edpt_dir(ep_addr)) { /* IN */
-    const unsigned num = _hcd.ep[dev_addr - 1][1][epn - 1];
-    hcd_int_disable(0);
-    USB0.PIPESEL.WORD  = num;
-    if (USB0.PIPECFG.BIT.TYPE != 1) {
-      *ctr = USB_PIPECTR_PID_BUF;
-    }
-    hcd_int_enable(0);
-  } else {
+  if (!tu_edpt_dir(ep_addr)) { /* OUT */
     *ctr = USB_PIPECTR_PID_BUF;
   }
   return true;