|
@@ -53,15 +53,7 @@
|
|
|
#define RXCOUNT1 0x06
|
|
#define RXCOUNT1 0x06
|
|
|
#define USB_PMASZ 0x300
|
|
#define USB_PMASZ 0x300
|
|
|
#define USB_PMASTP 0x02
|
|
#define USB_PMASTP 0x02
|
|
|
-
|
|
|
|
|
- .macro GetEPT
|
|
|
|
|
- add r4, r4, r0, LSR #25 //*EPT -> R4
|
|
|
|
|
- .endm
|
|
|
|
|
-
|
|
|
|
|
- .macro GetPMA
|
|
|
|
|
- ldr r4, =#USB_PMABASE
|
|
|
|
|
- adds r5, r4 // PMA BUFFER -> R5
|
|
|
|
|
- .endm
|
|
|
|
|
|
|
+ #define EPT_SHIFT 3
|
|
|
|
|
|
|
|
#else
|
|
#else
|
|
|
#define RXADDR0 0x00
|
|
#define RXADDR0 0x00
|
|
@@ -70,16 +62,7 @@
|
|
|
#define RXCOUNT1 0x0C
|
|
#define RXCOUNT1 0x0C
|
|
|
#define USB_PMASZ 0x200
|
|
#define USB_PMASZ 0x200
|
|
|
#define USB_PMASTP 0x04
|
|
#define USB_PMASTP 0x04
|
|
|
-
|
|
|
|
|
- .macro GetEPT
|
|
|
|
|
- add r4, r4, r0, LSR #24 //*EPT -> R4
|
|
|
|
|
- .endm
|
|
|
|
|
-
|
|
|
|
|
- .macro GetPMA
|
|
|
|
|
- ldr r4, =#USB_PMABASE
|
|
|
|
|
- lsls r5, #1
|
|
|
|
|
- adds r5, r4 // PMA BUFFER -> R5
|
|
|
|
|
- .endm
|
|
|
|
|
|
|
+ #define EPT_SHIFT 4
|
|
|
|
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
@@ -430,12 +413,12 @@ _ep_isstalled:
|
|
|
* out length of the recieved data -> R0 or 0 on error
|
|
* out length of the recieved data -> R0 or 0 on error
|
|
|
*/
|
|
*/
|
|
|
_ep_read:
|
|
_ep_read:
|
|
|
- push {r4, r5, lr}
|
|
|
|
|
|
|
+ push {r4, r5, r6, lr}
|
|
|
ldr r3, =#USB_EPBASE
|
|
ldr r3, =#USB_EPBASE
|
|
|
- ldr r4, =#USB_PMABASE
|
|
|
|
|
|
|
+ ldr r6, =#USB_PMABASE
|
|
|
lsls r0, #28
|
|
lsls r0, #28
|
|
|
add r3, r3, r0, LSR #26 //*EPR -> R3
|
|
add r3, r3, r0, LSR #26 //*EPR -> R3
|
|
|
- GetEPT //*EPT -> R4
|
|
|
|
|
|
|
+ add r4, r6, r0, LSR (28 - EPT_SHIFT) //*EPT -> R4
|
|
|
ldrh r5, [r3] // reading epr
|
|
ldrh r5, [r3] // reading epr
|
|
|
/* validating endpoint */
|
|
/* validating endpoint */
|
|
|
movs r0, #0x37
|
|
movs r0, #0x37
|
|
@@ -468,16 +451,16 @@ _ep_read:
|
|
|
.L_epr_iso:
|
|
.L_epr_iso:
|
|
|
lsrs r5, #15 // DTOG_RX -> CF
|
|
lsrs r5, #15 // DTOG_RX -> CF
|
|
|
bcs .L_epr_sngl
|
|
bcs .L_epr_sngl
|
|
|
- subs r4, #0x08 // set RXADDR0
|
|
|
|
|
|
|
+ subs r4, #RXADDR1 // set RXADDR0
|
|
|
.L_epr_sngl:
|
|
.L_epr_sngl:
|
|
|
ldrh r0, [r4, #RXCOUNT]
|
|
ldrh r0, [r4, #RXCOUNT]
|
|
|
lsrs r5, r0, #0x0A
|
|
lsrs r5, r0, #0x0A
|
|
|
lsls r5, #0x0A // r5 = r5 & ~0x03FF
|
|
lsls r5, #0x0A // r5 = r5 & ~0x03FF
|
|
|
strh r5, [r4, #RXCOUNT]
|
|
strh r5, [r4, #RXCOUNT]
|
|
|
- lsls r0, #22
|
|
|
|
|
- lsrs r0, #22 // r0 &= 0x3FF (RX count)
|
|
|
|
|
|
|
+ eors r0, r5 // r0 &= 0x3FF (RX count)
|
|
|
ldrh r5, [r4, #RXADDR]
|
|
ldrh r5, [r4, #RXADDR]
|
|
|
- GetPMA
|
|
|
|
|
|
|
+// ldr r4, =USB_PMABASE
|
|
|
|
|
+ adds r5, r4, r5, LSL (EPT_SHIFT - 3)
|
|
|
cmp r2, r0
|
|
cmp r2, r0
|
|
|
blo .L_epr_read
|
|
blo .L_epr_read
|
|
|
mov r2, r0 // if buffer is larger
|
|
mov r2, r0 // if buffer is larger
|
|
@@ -506,7 +489,7 @@ _ep_read:
|
|
|
and r5, r5, r2, LSR #16
|
|
and r5, r5, r2, LSR #16
|
|
|
strh r5, [r3] // set ep to VALID state
|
|
strh r5, [r3] // set ep to VALID state
|
|
|
.L_epr_exit:
|
|
.L_epr_exit:
|
|
|
- pop {r4, r5, pc}
|
|
|
|
|
|
|
+ pop {r4, r5, r6, pc}
|
|
|
.size _ep_read, . - _ep_read
|
|
.size _ep_read, . - _ep_read
|
|
|
|
|
|
|
|
|
|
|
|
@@ -521,10 +504,10 @@ _ep_read:
|
|
|
_ep_write:
|
|
_ep_write:
|
|
|
push {r4, r5, r6, lr}
|
|
push {r4, r5, r6, lr}
|
|
|
ldr r3, =#USB_EPBASE
|
|
ldr r3, =#USB_EPBASE
|
|
|
- ldr r4, =#USB_PMABASE
|
|
|
|
|
|
|
+ ldr r6, =#USB_PMABASE
|
|
|
lsls r0, #28
|
|
lsls r0, #28
|
|
|
add r3, r3, r0, LSR #26 //*EPR -> R3
|
|
add r3, r3, r0, LSR #26 //*EPR -> R3
|
|
|
- GetEPT
|
|
|
|
|
|
|
+ add r4, r6, r0, LSR (28 - EPT_SHIFT) //*EPT -> R4
|
|
|
ldrh r5, [r3] // reading epr
|
|
ldrh r5, [r3] // reading epr
|
|
|
movs r0, #0x73
|
|
movs r0, #0x73
|
|
|
and r0, r0, r5, LSR #4
|
|
and r0, r0, r5, LSR #4
|
|
@@ -547,20 +530,19 @@ _ep_write:
|
|
|
.L_epw_iso:
|
|
.L_epw_iso:
|
|
|
lsrs r5, #7 // DTOG_TX -> CF
|
|
lsrs r5, #7 // DTOG_TX -> CF
|
|
|
bcs .L_epw_sngl
|
|
bcs .L_epw_sngl
|
|
|
- adds r4, #8 // TXADDR1 -> R4
|
|
|
|
|
|
|
+ adds r4, #RXADDR1 // TXADDR1 -> R4
|
|
|
.L_epw_sngl:
|
|
.L_epw_sngl:
|
|
|
strh r2, [r4, #TXCOUNT]
|
|
strh r2, [r4, #TXCOUNT]
|
|
|
mov r0, r2 // save count for return
|
|
mov r0, r2 // save count for return
|
|
|
ldrh r5, [r4, #TXADDR]
|
|
ldrh r5, [r4, #TXADDR]
|
|
|
- GetPMA
|
|
|
|
|
|
|
+ adds r5, r6, r5, LSL (EPT_SHIFT - 3)
|
|
|
.L_epw_write:
|
|
.L_epw_write:
|
|
|
cmp r2, #1
|
|
cmp r2, #1
|
|
|
blo .L_epw_write_end
|
|
blo .L_epw_write_end
|
|
|
ldrb r4, [r1]
|
|
ldrb r4, [r1]
|
|
|
beq .L_epw_store
|
|
beq .L_epw_store
|
|
|
ldrb r6, [r1, #1]
|
|
ldrb r6, [r1, #1]
|
|
|
- lsls r6, #8
|
|
|
|
|
- orrs r4, r6
|
|
|
|
|
|
|
+ orr r4, r4, r6, LSL #8
|
|
|
.L_epw_store:
|
|
.L_epw_store:
|
|
|
strh r4, [r5]
|
|
strh r4, [r5]
|
|
|
adds r5, #USB_PMASTP
|
|
adds r5, #USB_PMASTP
|
|
@@ -605,7 +587,7 @@ _get_next_pma:
|
|
|
blo .L_gnp_nxtaddr
|
|
blo .L_gnp_nxtaddr
|
|
|
mov r3, r4
|
|
mov r3, r4
|
|
|
.L_gnp_nxtaddr:
|
|
.L_gnp_nxtaddr:
|
|
|
- adds r0, #8
|
|
|
|
|
|
|
+ adds r0, #RXADDR1
|
|
|
subs r1, #1
|
|
subs r1, #1
|
|
|
bne .L_gnp_chkaddr
|
|
bne .L_gnp_chkaddr
|
|
|
subs r0, r3, r2
|
|
subs r0, r3, r2
|
|
@@ -613,9 +595,6 @@ _get_next_pma:
|
|
|
cmp r0, #0x20 //check for the pma table overlap
|
|
cmp r0, #0x20 //check for the pma table overlap
|
|
|
.L_gnp_exit:
|
|
.L_gnp_exit:
|
|
|
pop {r1, r3, r4, pc}
|
|
pop {r1, r3, r4, pc}
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
.size _get_next_pma, . - _get_next_pma
|
|
.size _get_next_pma, . - _get_next_pma
|
|
|
|
|
|
|
|
.thumb_func
|
|
.thumb_func
|
|
@@ -628,26 +607,25 @@ _get_next_pma:
|
|
|
*/
|
|
*/
|
|
|
_ep_config:
|
|
_ep_config:
|
|
|
push {r4, r5, lr}
|
|
push {r4, r5, lr}
|
|
|
- movs r3, 0x01
|
|
|
|
|
- ands r3, r2
|
|
|
|
|
- adds r2, r3 //R2 -> halfword aligned epsize
|
|
|
|
|
- movs r3, #0x00 //BULK
|
|
|
|
|
- cmp r1, #0x02 // is eptype bulk ?
|
|
|
|
|
|
|
+ movs r3, #0x01
|
|
|
|
|
+ adds r2, r3
|
|
|
|
|
+ bics r2, r3 //R2 -> halfword aligned epsize
|
|
|
|
|
+ cmp r1, #0x06 //DBLBULK (0x01)
|
|
|
beq .L_epc_settype
|
|
beq .L_epc_settype
|
|
|
- movs r3, #0x01 //DBLBULK
|
|
|
|
|
- cmp r1, #0x06
|
|
|
|
|
|
|
+ movs r3, #0x00
|
|
|
|
|
+ cmp r1, #0x02 //BULK
|
|
|
beq .L_epc_settype
|
|
beq .L_epc_settype
|
|
|
- movs r3, #0x02 //CONTROL
|
|
|
|
|
- cmp r1, #0x00
|
|
|
|
|
|
|
+ movs r3, #0x02
|
|
|
|
|
+ cmp r1, #0x00 //CONTROL
|
|
|
beq .L_epc_settype
|
|
beq .L_epc_settype
|
|
|
- movs r3, #0x04 //ISO
|
|
|
|
|
- cmp r1, #0x01
|
|
|
|
|
|
|
+ movs r3, #0x04
|
|
|
|
|
+ cmp r1, #0x01 //ISO
|
|
|
beq .L_epc_settype
|
|
beq .L_epc_settype
|
|
|
- movs r3, #0x06 //INTERRUPT
|
|
|
|
|
|
|
+ movs r3, #0x06 //INTERRUPT
|
|
|
.L_epc_settype:
|
|
.L_epc_settype:
|
|
|
lsls r3, #8
|
|
lsls r3, #8
|
|
|
- lsls r4, r0, #28
|
|
|
|
|
- lsrs r4, #28
|
|
|
|
|
|
|
+ movs r4, #0x07
|
|
|
|
|
+ ands r4, r0
|
|
|
orrs r3, r4
|
|
orrs r3, r4
|
|
|
lsls r4, #2
|
|
lsls r4, #2
|
|
|
ldr r5, =#USB_EPBASE
|
|
ldr r5, =#USB_EPBASE
|
|
@@ -658,8 +636,7 @@ _ep_config:
|
|
|
blo .L_epc_setuprx
|
|
blo .L_epc_setuprx
|
|
|
.L_epc_setuptx:
|
|
.L_epc_setuptx:
|
|
|
ldr r5, =#USB_PMABASE
|
|
ldr r5, =#USB_PMABASE
|
|
|
- lsls r4, #2
|
|
|
|
|
- adds r5, r4
|
|
|
|
|
|
|
+ adds r5, r5, r4, LSL (EPT_SHIFT - 2)
|
|
|
bl _get_next_pma
|
|
bl _get_next_pma
|
|
|
bcc .L_epc_fail
|
|
bcc .L_epc_fail
|
|
|
strh r0, [r5, #TXADDR] //store txaddr or txaddr0
|
|
strh r0, [r5, #TXADDR] //store txaddr or txaddr0
|
|
@@ -679,7 +656,6 @@ _ep_config:
|
|
|
strh r0, [r5, #TXCOUNT1] //store txcnt
|
|
strh r0, [r5, #TXCOUNT1] //store txcnt
|
|
|
.L_epc_txsetstate:
|
|
.L_epc_txsetstate:
|
|
|
ldr r5, =#USB_EPBASE
|
|
ldr r5, =#USB_EPBASE
|
|
|
- lsrs r4, #2
|
|
|
|
|
ldrh r0, [r5, r4]
|
|
ldrh r0, [r5, r4]
|
|
|
eors r0, r3
|
|
eors r0, r3
|
|
|
lsrs r3, #16
|
|
lsrs r3, #16
|
|
@@ -688,23 +664,18 @@ _ep_config:
|
|
|
cmp r1, #0x00 //is a control ep ?
|
|
cmp r1, #0x00 //is a control ep ?
|
|
|
bne .L_epc_exit
|
|
bne .L_epc_exit
|
|
|
.L_epc_setuprx:
|
|
.L_epc_setuprx:
|
|
|
- mov r3, r2
|
|
|
|
|
|
|
+ movs r3, r2
|
|
|
cmp r2, #62
|
|
cmp r2, #62
|
|
|
bls .L_epc_rxbb
|
|
bls .L_epc_rxbb
|
|
|
movs r3, #0x1F
|
|
movs r3, #0x1F
|
|
|
- ands r3, r2
|
|
|
|
|
- bne .L_epc_rxaa
|
|
|
|
|
- subs r2, #0x20
|
|
|
|
|
-.L_epc_rxaa:
|
|
|
|
|
|
|
+ adds r2, r3
|
|
|
bics r2, r3
|
|
bics r2, r3
|
|
|
lsrs r3, r2, #4
|
|
lsrs r3, r2, #4
|
|
|
- adds r3, #0x40
|
|
|
|
|
- adds r2, #0x20
|
|
|
|
|
|
|
+ adds r3, #0x3E
|
|
|
.L_epc_rxbb:
|
|
.L_epc_rxbb:
|
|
|
lsls r3, #9
|
|
lsls r3, #9
|
|
|
ldr r5, =#USB_PMABASE
|
|
ldr r5, =#USB_PMABASE
|
|
|
- lsls r4, #2
|
|
|
|
|
- adds r5, r4
|
|
|
|
|
|
|
+ adds r5, r5, r4, LSL (EPT_SHIFT - 2)
|
|
|
/* RX or RX1 */
|
|
/* RX or RX1 */
|
|
|
bl _get_next_pma
|
|
bl _get_next_pma
|
|
|
bcc .L_epc_fail
|
|
bcc .L_epc_fail
|
|
@@ -724,7 +695,6 @@ _ep_config:
|
|
|
ldr r0, =#DRX_USTALL
|
|
ldr r0, =#DRX_USTALL
|
|
|
.L_epc_rxsetstate:
|
|
.L_epc_rxsetstate:
|
|
|
ldr r5, =#USB_EPBASE
|
|
ldr r5, =#USB_EPBASE
|
|
|
- lsrs r4, #2
|
|
|
|
|
ldrh r3, [r5, r4]
|
|
ldrh r3, [r5, r4]
|
|
|
eors r3, r0
|
|
eors r3, r0
|
|
|
lsrs r0, #16
|
|
lsrs r0, #16
|
|
@@ -752,8 +722,7 @@ _ep_deconfig:
|
|
|
ldr r2, =#USB_EPBASE
|
|
ldr r2, =#USB_EPBASE
|
|
|
ldr r3, =#USB_PMABASE
|
|
ldr r3, =#USB_PMABASE
|
|
|
adds r2, r1
|
|
adds r2, r1
|
|
|
- lsls r1, #1
|
|
|
|
|
- adds r3, r1
|
|
|
|
|
|
|
+ adds r3, r3, r1, LSL (EPT_SHIFT - 2)
|
|
|
/* clearing endpoint register */
|
|
/* clearing endpoint register */
|
|
|
ldr r1, =#EP_NOTOG
|
|
ldr r1, =#EP_NOTOG
|
|
|
ldrh r0, [r2]
|
|
ldrh r0, [r2]
|