📄 emb_f.asm
字号:
SetInStall:
orl EPCON , #SET_IN_STALL_MASK
jmp ReturnSTDSetEPCommand
ReturnBadSTDSetEPCommand:
orl EPCON , #0C0h ;Stall EP0
ReturnSTDSetEPCommand:
pop EPINDEX
jmp SetUpControlWriteStatusStage
;COMMENT *------------------------------------------------------------
;Function name : StandardSetDeviceCommand:
;Brief Description : Process a Standard Set Device Command Setup Token
; : The only valid commands are Set Address,
; : Set Configuration. Other commands which have this
; : field but are un-defined are
; : ClearDeviceFeature, SetDescriptor, SetDeviceFeature.
; :
;Regs preserved : No reg. is saved
;--------------------------------------------------------------------*
;SCOPE
StandardSetDeviceCommand:
mov A, bRequest
cjne A, #SET_CONFIGURATION, CheckSetDeviceAddress
SetDeviceConfiguration:
;------------------------------------------------
;- SET DEVICE CONFIGURATION
;------------------------------------------------
; Check to see what configuration we should take on.
mov A, wValue+1
CheckConfig0:
cjne A, #0, CheckConfig1
mov CurrentConfiguration, R11 ; Set up the variables
Call ResetFifos ; Empty out all of the FIFOs and return to
; the un configuraed state.
jb LC, ReturnSTDSetDevice ; Are we in low power state?
setb LC ; If not then goto low power state.
jmp ReturnSTDSetDevice
CheckConfig1:
cjne A, #1, CheckConfig2
mov CurrentConfiguration, R11 ; Set up the variables
Call SetUpConfiguration1
jmp ReturnSTDSetDevice
CheckConfig2:
cjne A, #2, ReturnBadSetDeviceCommand
jmp ReturnSTDSetDevice
CheckSetDeviceAddress:
cjne A, #SET_ADDRESS, CheckSetDeviceRWU
;------------------------------------------------
;- SET DEVICE ADDRESS
;------------------------------------------------
; Set Address should just return. The command will be executed following
; the status stage
jmp ReturnSTDSetDevice
CheckSetDeviceRWU:
cjne A, #SET_FEATURE, CheckClearDeviceRWU
mov A, wValue+1
cjne A, #DEVICE_REMOTE_WAKEUP, ReturnBadSetDeviceCommand
; Call user function to enable RWU
jmp ReturnSTDSetDevice
CheckClearDeviceRWU:
cjne A, #CLEAR_FEATURE, ReturnBadSetDeviceCommand
mov A, wValue+1
cjne A, #DEVICE_REMOTE_WAKEUP, ReturnBadSetDeviceCommand
;Call user code to disable RWU capibility
jmp ReturnSTDSetDevice
ReturnSTDSetDevice:
jmp SetUpControlWriteStatusStage
ReturnBadSetDeviceCommand:
; push EPINDEX
; mov EPINDEX, #01
; mov TXDAT, #20h
; mov TXCNT, #01h
; pop EPINDEX
orl EPCON , #0C0h ; Stall Endpoint
ret
StandardSetInterfaceCommand:
mov A, bRequest
cjne A, #SET_INTERFACE, ReturnBadSetDeviceCommand
mov A, wValue+1
orl A, wIndex+1
jnz ReturnBadSetDeviceCommand
mov CurrentConfig1Interface, R11
sjmp ReturnSTDSetDevice
StandardGetInterfaceCommand:
mov A, bRequest
cjne A, #GET_INTERFACE, ReturnBadSetDeviceCommand
mov A, wValue+1
jnz ReturnBadSetDeviceCommand
mov R11, CurrentConfig1Interface
mov TXDAT , A
mov TXCNTL, #01
ret
StandardSetOtherCommand:
StandardGetOtherCommand:
;------------------------------------------
; - Unknown Standard Command -- STALL ENDPOINT
;------------------------------------------
orl EPCON , #0C0h ; Stall Endpoint
ret
;COMMENT *------------------------------------------------------------
;Function name : SetUpConfiguration1
;Brief Description : Setup the endpoints to the parameters specified in the
; : configuration 1 descriptor.
; :
; : See below for the actual values.
; :
; :
;Regs preserved : No reg. is saved
;--------------------------------------------------------------------*
;SCOPE
SetUpConfiguration1:
push EPINDEX
clr LC ; High MIPs & Power mode
call ResetFifos ; Place all FIFOs in known state
$$IF$ (EPSET1 == 1)
mov EPINDEX, #01h ; EP1
mov TXCON, #0$$TXCON1$h ; TX FIFO
mov RXCON, #0$$RXCON1$h ; RX FIFO
mov EPCON, #0$$EPCON1$h ; EP Control
$$END$
$$IF$ (EPSET2 == 1)
mov EPINDEX, #02h ; EP2
mov TXCON, #0$$TXCON2$h ; TX FIFO
mov RXCON, #0$$RXCON2$h ; RX FIFO
mov EPCON, #0$$EPCON2$h ; EP Control
$$END$
$$IF$ (EPSET3 == 1)
mov EPINDEX, #03h ; EP3
mov TXCON, #0$$TXCON3$h ; TX FIFO
mov RXCON, #0$$RXCON3$h ; RX FIFO
mov EPCON, #0$$EPCON3$h ; EP Control
$$END$
pop EPINDEX
ret
;COMMENT *------------------------------------------------------------
;Function name : SetUpConfiguration0
;Brief Description : Setup the endpoints to the parameters specified in the
; : configuration 1 descriptor.
; :
; : See below for the actual values.
; :
; :
;Regs preserved : No reg. is saved
;--------------------------------------------------------------------*
;SCOPE
ResetFifos:
; This routine flushes and clears all of the fifos.
; THe routine also sets data toggle back to zero as
; defined in the USB spec. This routine would be called
; when ever you change configurations.
; Subsets of this routine sould be called when changing interfaces.
anl FIE, #03h
anl FIFLG, #03h
mov A, #03h ; Number of FIFOS
ResetFifoLoop:
mov EPINDEX, A
orl TXCON, #80h ; Flush the TX FIFOs
orl RXCON, #80h ; Flush the RX FIFOs
orl TXSTAT, #04h ; Reset data toggle back to zero
orl RXSTAT, #04h ; Reset data toggle back to zero
mov EPCON , #040h ; Reset value
djnz ACC, ResetFifoLoop
ret
;-----------------------------------------------------------------
;SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSs
;S
;S END OF STANDARD TYPE COMMANDS
;S
;SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSs
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
;C
;C START OF CLASS COMMANDS
;C
;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
;-----------------------------------------------------------------
ClassGetDeviceCommand:
ClassGetOtherCommand:
ClassSetDeviceCommand:
ClassSetEndpointCommand:
ClassSetOtherCommand:
ClassSetInterfaceCommand:
ClassGetInterfaceCommand:
ClassGetEndpointCommand:
orl EPCON , #0C0h ;Stall Endpoint
ret
;-----------------------------------------------------------------
;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
;C
;C END OF CLASS COMMANDS
;C
;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;V
;V START OF VENDOR COMMANDS
;V
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;-----------------------------------------------------------------
VendorSetDeviceCommand:
call SetUpControlWriteStatusStage ; We know this will was a single packet only
ret
VendorGetDeviceCommand:
ret
VendorSetInterfaceCommand:
VendorGetInterfaceCommand:
VendorSetEndpointCommand:
VendorGetEndpointCommand:
VendorSetOtherCommand:
VendorGetOtherCommand:
;------------------------------------------
; - UnknownVendorCommand -- STALL ENDPOINT
;------------------------------------------
orl EPCON , #0C0h ;Stall Endpoint
ret
;-----------------------------------------------------------------
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;V
;V END OF VENDOR COMMANDS
;V
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
;U
;U UTILILITY ROUTINES
;U
;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
;-----------------------------------------------------------------
;COMMENT *------------------------------------------------------------
;Function name : ProcessInToken
;Brief Description : Services all INs on EP0.
;Regs preserved : No reg. is saved
;--------------------------------------------------------------------*
;SCOPE
ProcessInToken:
anl FIFLG, #EP0_TX_CLR ; clear the interrupt bit
jmp CheckInStatusPhase
ProcessHubInToken:
CheckInStatusPhase:
mov A, gbSetupSeqTX ; read state variable
cjne A, #STATUS_PHASE,SendDataBack ; Should this be the end to
; a setup sequence
StatusPhaseDone:
lCall CompleteSetCommand
mov gbSetupSeqTX, #SETUP_PHASE ; Set state var. to expect setup.
mov gbSetupSeqRX, #SETUP_PHASE
jmp ReturnProcessIn
SendDataBack:
cjne A, #DATA_PHASE, ReturnProcessIn
call LoadControlTXFifo
ReturnProcessIn:
Ret
;COMMENT *------------------------------------------------------------
;Function name : CompleteSetCommand
;Brief Description : Called after the status phase of a set command has
; : completed. This is called everytime there is a
; : xmit status stage.
;Regs preserved : No reg. is saved
;--------------------------------------------------------------------*
;SCOPE
CompleteSetCommand:
mov A, bRequest ; If this was not a Std. Set
; command then return.
cjne A, #SET_ADDRESS, CheckNextCommand
;------------------------------------------------
;- SET ADDRESS
;------------------------------------------------
DoSetAddress:
;
SetFunctionAddress:
mov FADDR, wValue+1 ; S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -