Bladeren bron

Incorrect doublebuffered read fixed for ASM drivers

Dmitry 8 jaren geleden
bovenliggende
commit
2e712d1f53
2 gewijzigde bestanden met toevoegingen van 19 en 24 verwijderingen
  1. 3 3
      src/usb_32v0A.S
  2. 16 21
      src/usb_32v1A.S

+ 3 - 3
src/usb_32v0A.S

@@ -389,8 +389,8 @@ _ep_read:
 .L_epr_dbl:
     lsrs    r0, r5, #8
     eors    r0, r5
-    lsrs    r0, #6          // SW_RX ^ DTOG_RX -> CF
-    bcc     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
+    lsrs    r0, #7          // SW_RX ^ DTOG_RX -> CF
+    bcs     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
     ldr     r0, =#EP_NOTOG
     ands    r5, r0
     adds    r5, #EP_RX_SWBUF
@@ -400,7 +400,7 @@ _ep_read:
     lsls    r5, #8          // shift SW_RX to DTOG_RX
 .L_epr_iso:
     lsrs    r5, #15         // DTOG_RX -> CF
-    bcc     .L_epr_sngl
+    bcs     .L_epr_sngl
     subs    r4, #0x04       // set RXADDR0
 .L_epr_sngl:
     ldrh    r0, [r4, #RXCOUNT]

+ 16 - 21
src/usb_32v1A.S

@@ -349,7 +349,7 @@ _ep_read:
     push    {r4, r5, lr}
     ldr     r3, =#USB_EPBASE
     ldr     r4, =#USB_PMABASE
-    lsls    r0,  #28
+    lsls    r0, #28
     lsrs    r0, #26
     adds    r3, r0          // *EPR -> R3
     lsls    r0, #2
@@ -377,8 +377,8 @@ _ep_read:
 .L_epr_dbl:
     lsrs    r0, r5, #8
     eors    r0, r5
-    lsrs    r0, #6          // SW_RX ^ DTOG_RX -> CF
-    bcc     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
+    lsrs    r0, #7          // SW_RX ^ DTOG_RX -> CF
+    bcs     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
     ldr     r0, =#EP_NOTOG
     ands    r5, r0
     adds    r5, #EP_RX_SWBUF
@@ -388,7 +388,7 @@ _ep_read:
     lsls    r5, #8          // shift SW_RX to DTOG_RX
 .L_epr_iso:
     lsrs    r5, #15         // DTOG_RX -> CF
-    bcc     .L_epr_sngl
+    bcs     .L_epr_sngl
     subs    r4, #0x08       // set RXADDR0
 .L_epr_sngl:
     ldrh    r0, [r4, #RXCOUNT]
@@ -719,20 +719,20 @@ _evt_poll:
     movs    r2, 0x07
     ands    r2, r0
 /* checking USB->ISTR for events */
-    lsls    r0, #17             //CTRM -> CF
+#if !defined(USBD_SOF_DISABLED)
+    lsrs    r1, r0, #10         //SOFM -> CF
+    bcs     .L_ep_sofm
+#endif
+    lsrs    r1, r0, #11         //RESETM -> CF
+    bcs     .L_ep_resetm
+    lsrs    r1, r0, #16         //CTRM -> CF
     bcs     .L_ep_ctrm
-    lsls    r0, #2              //ERRM -> CF
+    lsrs    r1, r0, #14         //ERRM -> CF
     bcs     .L_ep_errm
-    lsls    r0, #1              //WKUPM -> CF
+    lsrs    r1, r0, #13         //WKUPM -> CF
     bcs     .L_ep_wkupm
-    lsls    r0, #1              //SUSPM -> CF
+    lsrs    r1, r0, #12         //SUSPM -> CF
     bcs     .L_ep_suspm
-    lsls    r0, #1              //RESETM -> CF
-    bcs     .L_ep_resetm
-    lsls    r0, #1              //SOFM -> CF
-    bcs     .L_ep_sofm
-    lsls    r0, #1
-    bcs     .L_ep_esofm
     /* exit with no callback */
     pop     {r0, r1, r4 , r5}
     bx      lr
@@ -767,17 +767,12 @@ _evt_poll:
     movs    r1, #usbd_evt_error
     movs    r4, #ISTRBIT(13)
     b      .L_ep_clristr
-
+#if !defined(USBD_SOF_DISABLED)
 .L_ep_sofm:
     movs    r1, #usbd_evt_sof
     movs    r4, #ISTRBIT(9)
     b       .L_ep_clristr
-
-.L_ep_esofm:
-    movs    r1, #usbd_evt_esof
-    movs    r4, #ISTRBIT(8)
-    b       .L_ep_clristr
-
+#endif
 .L_ep_wkupm:
     ldrh    r1, [r3, #0]            //R1 USB->CNTR
     movs    r5, #0x08