⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emb_f.asm

📁 mcs51,2051,x86系列MCU
💻 ASM
📖 第 1 页 / 共 5 页
字号:
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 + -