|
@@ -163,7 +163,6 @@ _get_serial_desc:
|
|
|
.thumb_func
|
|
.thumb_func
|
|
|
.type _connect, %function
|
|
.type _connect, %function
|
|
|
_connect:
|
|
_connect:
|
|
|
-#if 1
|
|
|
|
|
ldr r3, =#USB_REGBASE
|
|
ldr r3, =#USB_REGBASE
|
|
|
movs r1, #0x03 //BCDEN + DCDEN
|
|
movs r1, #0x03 //BCDEN + DCDEN
|
|
|
movs r2, #usbd_lane_dsc
|
|
movs r2, #usbd_lane_dsc
|
|
@@ -191,20 +190,11 @@ _connect:
|
|
|
subs r1, r0, #1
|
|
subs r1, r0, #1
|
|
|
sbcs r0, r1
|
|
sbcs r0, r1
|
|
|
lsls r0, #15
|
|
lsls r0, #15
|
|
|
- strh r1, [r3, #USB_BCDR]
|
|
|
|
|
|
|
+ strh r0, [r3, #USB_BCDR]
|
|
|
mov r0, r2
|
|
mov r0, r2
|
|
|
bx lr
|
|
bx lr
|
|
|
-#else
|
|
|
|
|
- subs r1, r0, #1
|
|
|
|
|
- sbcs r0, r1
|
|
|
|
|
- lsls r0, #15
|
|
|
|
|
- ldr r1, =#USB_REGBASE
|
|
|
|
|
- strh r0, [r1, #USB_BCDR] //USB->BCDR
|
|
|
|
|
- bx lr
|
|
|
|
|
-#endif
|
|
|
|
|
.size _connect, . - _connect
|
|
.size _connect, . - _connect
|
|
|
|
|
|
|
|
-
|
|
|
|
|
.thumb_func
|
|
.thumb_func
|
|
|
.type _setaddr, %function
|
|
.type _setaddr, %function
|
|
|
_setaddr:
|
|
_setaddr:
|
|
@@ -255,8 +245,12 @@ _enable:
|
|
|
str r0, [r2, #RCC_APB1RSTR] //RCC->APB1RSTR |= USBRST
|
|
str r0, [r2, #RCC_APB1RSTR] //RCC->APB1RSTR |= USBRST
|
|
|
bics r0, r3
|
|
bics r0, r3
|
|
|
str r0, [r2, #RCC_APB1RSTR] //RCC->APB1RSTR &= ~USBRST
|
|
str r0, [r2, #RCC_APB1RSTR] //RCC->APB1RSTR &= ~USBRST
|
|
|
- movs r0, #0xBE
|
|
|
|
|
- lsls r0, #0x08 // CTRM | ERRM | WKUPM | SUSPM | RESETM | SOFM
|
|
|
|
|
|
|
+#if !defined(USBD_SOF_DISABLED)
|
|
|
|
|
+ movs r0, #0xBE // CTRM | ERRM | WKUPM | SUSPM | RESETM | SOFM
|
|
|
|
|
+#else
|
|
|
|
|
+ movs r0, #0xBC // CTRM | ERRM | WKUPM | SUSPM | RESETM
|
|
|
|
|
+#endif
|
|
|
|
|
+ lsls r0, #0x08
|
|
|
strh r0, [r1] //set USB->CNTR
|
|
strh r0, [r1] //set USB->CNTR
|
|
|
bx lr
|
|
bx lr
|
|
|
.L_disable:
|
|
.L_disable:
|
|
@@ -395,19 +389,18 @@ _ep_read:
|
|
|
.L_epr_dbl:
|
|
.L_epr_dbl:
|
|
|
lsrs r0, r5, #8
|
|
lsrs r0, r5, #8
|
|
|
eors r0, r5
|
|
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
|
|
ldr r0, =#EP_NOTOG
|
|
|
ands r5, r0
|
|
ands r5, r0
|
|
|
adds r5, #EP_RX_SWBUF
|
|
adds r5, #EP_RX_SWBUF
|
|
|
strh r5, [r3] // toggling SW_RX
|
|
strh r5, [r3] // toggling SW_RX
|
|
|
- ldrh r5, [r3]
|
|
|
|
|
.L_epr_notog:
|
|
.L_epr_notog:
|
|
|
- mvns r5, r5
|
|
|
|
|
- lsls r5, #8 // shift ~SW_RX to DTOG_RX
|
|
|
|
|
|
|
+ ldrh r5, [r3]
|
|
|
|
|
+ lsls r5, #8 // shift SW_RX to DTOG_RX
|
|
|
.L_epr_iso:
|
|
.L_epr_iso:
|
|
|
lsrs r5, #15 // DTOG_RX -> CF
|
|
lsrs r5, #15 // DTOG_RX -> CF
|
|
|
- bcc .L_epr_sngl
|
|
|
|
|
|
|
+ bcs .L_epr_sngl
|
|
|
subs r4, #0x04 // set RXADDR0
|
|
subs r4, #0x04 // set RXADDR0
|
|
|
.L_epr_sngl:
|
|
.L_epr_sngl:
|
|
|
ldrh r0, [r4, #RXCOUNT]
|
|
ldrh r0, [r4, #RXCOUNT]
|
|
@@ -477,8 +470,6 @@ _ep_write:
|
|
|
lsrs r0, #4
|
|
lsrs r0, #4
|
|
|
cmp r0, #0x43 // (OK) TX_VALID + ISO
|
|
cmp r0, #0x43 // (OK) TX_VALID + ISO
|
|
|
beq .L_epw_iso
|
|
beq .L_epw_iso
|
|
|
- cmp r0, #0x13 // (OK) TX_VALID + DBLBULK
|
|
|
|
|
- beq .L_epw_dbl
|
|
|
|
|
cmp r0, #0x12 // (OK) TX_NAK + DBLBULK
|
|
cmp r0, #0x12 // (OK) TX_NAK + DBLBULK
|
|
|
beq .L_epw_dbl
|
|
beq .L_epw_dbl
|
|
|
cmp r0, #0x02 // (OK) TX_NAK + BULK
|
|
cmp r0, #0x02 // (OK) TX_NAK + BULK
|
|
@@ -735,20 +726,20 @@ _evt_poll:
|
|
|
movs r2, 0x07
|
|
movs r2, 0x07
|
|
|
ands r2, r0
|
|
ands r2, r0
|
|
|
/* checking USB->ISTR for events */
|
|
/* 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, #16 //CTRM -> CF
|
|
|
bcs .L_ep_ctrm
|
|
bcs .L_ep_ctrm
|
|
|
- lsls r0, #2 //ERRM -> CF
|
|
|
|
|
|
|
+ lsrs r1, r0, #14 //ERRM -> CF
|
|
|
bcs .L_ep_errm
|
|
bcs .L_ep_errm
|
|
|
- lsls r0, #1 //WKUPM -> CF
|
|
|
|
|
|
|
+ lsrs r1, r0, #13 //WKUPM -> CF
|
|
|
bcs .L_ep_wkupm
|
|
bcs .L_ep_wkupm
|
|
|
- lsls r0, #1 //SUSPM -> CF
|
|
|
|
|
|
|
+ lsrs r1, r0, #12 //SUSPM -> CF
|
|
|
bcs .L_ep_suspm
|
|
bcs .L_ep_suspm
|
|
|
- lsls r0, #1 //RESETM -> CF
|
|
|
|
|
|
|
+ lsrs r1, r0, #11 //RESETM -> CF
|
|
|
bcs .L_ep_resetm
|
|
bcs .L_ep_resetm
|
|
|
- lsls r0, #1 //SOFM -> CF
|
|
|
|
|
- bcs .L_ep_sofm
|
|
|
|
|
- lsls r0, #1
|
|
|
|
|
- bcs .L_ep_esofm
|
|
|
|
|
/* exit with no callback */
|
|
/* exit with no callback */
|
|
|
pop {r0, r1, r4 , r5}
|
|
pop {r0, r1, r4 , r5}
|
|
|
bx lr
|
|
bx lr
|
|
@@ -783,17 +774,12 @@ _evt_poll:
|
|
|
movs r1, #usbd_evt_error
|
|
movs r1, #usbd_evt_error
|
|
|
movs r4, #ISTRBIT(13)
|
|
movs r4, #ISTRBIT(13)
|
|
|
b .L_ep_clristr
|
|
b .L_ep_clristr
|
|
|
-
|
|
|
|
|
|
|
+#if !defined(USBD_SOF_DISABLED)
|
|
|
.L_ep_sofm:
|
|
.L_ep_sofm:
|
|
|
movs r1, #usbd_evt_sof
|
|
movs r1, #usbd_evt_sof
|
|
|
movs r4, #ISTRBIT(9)
|
|
movs r4, #ISTRBIT(9)
|
|
|
b .L_ep_clristr
|
|
b .L_ep_clristr
|
|
|
-
|
|
|
|
|
-.L_ep_esofm:
|
|
|
|
|
- movs r1, #usbd_evt_esof
|
|
|
|
|
- movs r4, #ISTRBIT(8)
|
|
|
|
|
- b .L_ep_clristr
|
|
|
|
|
-
|
|
|
|
|
|
|
+#endif
|
|
|
.L_ep_wkupm:
|
|
.L_ep_wkupm:
|
|
|
ldrh r1, [r3, #USB_CNTR] //R1 USB->CNTR
|
|
ldrh r1, [r3, #USB_CNTR] //R1 USB->CNTR
|
|
|
movs r5, #0x08
|
|
movs r5, #0x08
|
|
@@ -843,7 +829,6 @@ _evt_poll:
|
|
|
bx r3
|
|
bx r3
|
|
|
.size _evt_poll, . - _evt_poll
|
|
.size _evt_poll, . - _evt_poll
|
|
|
|
|
|
|
|
-
|
|
|
|
|
.pool
|
|
.pool
|
|
|
|
|
|
|
|
.end
|
|
.end
|