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

📄 usb_int.asm

📁 一款很好的USB接口的鼠标
💻 ASM
📖 第 1 页 / 共 2 页
字号:

        snz     bFLAG_Setup             ;
        JMP     AccessFIFO0_cont2       ; No (data stage(Host to device)

Setup_stage:
        clr     r1.@USB_Setup           ; clear USB setup bit
        clr     r1.@USB_Len0            ;
        clr     bwait_setup             ;
        set     bsetup_flag             ;
        jmp     Exitext0                ;
;-------------------------------------------------------------------------------
AccessFIFO0_cont2:
        CALL    FIFO0_Rd_Check          ; Any data in FIFO 0 ?
        CLR     R1.@USB_Req             ; No: Clear request for FIFO0_Rd_Check
        SZ      Z                       ;
        ;JMP     HaveDataInFIFO0         ; Yes

        ;Host read out data from FIFO 0
        ;Send next transaction data
        JMP     SendFIFO0               ;
;----------------------------------------------------------------------------
;HaveDataInFIFO0:
        ;JMP     DataStage               ; No (data stage(Host to device)
DataStage:
        sz      bsetup_flag             ;
        JMP     get_cmd_data            ;

;        CALL    FIFO0_Rd_Check          ; Any data in FIFO 0 ?
;        CALL    ReadFIFO0               ; Read FIFO 0
;        sz      bCMD_INDEX              ;
        jmp     ToStallPipe0 ;Set_SetOutput           ;
;        jmp     RedundantData           ;
;
;RedundantData:
        JMP     ExitExt0                ;
;
;Set_SetOutput:
;        JMP     ToStallPipe0            ; No
;----------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
SendHandShake:
        CALL    LEN0_Wr_Check           ; FIFO0 ready ?
        SnZ     Z                       ;
        jmp     SendHandShake_Continue  ;

        clr     r1.@USB_Req             ;
        sz      r1.@usb_len0            ;
        JMP     ExitExt0                ; continue to scan keyboard

        sz      r1.@USB_Setup           ;
        jmp     ExitExt0                ; continue to scan keyboard
        jmp     SendHandshake           ;

SendHandshake_Continue:
        CALL    WriteLen0               ; ACK (Write 0 length)
        set     bwait_setup             ;
        JMP     ExitExt0                ; continue to scan keyboard

;----------------------------------------------------------------------------
extern  USBFlag : byte
get_cmd_data:
        clr     bsetup_flag             ;
        CALL    FIFO0_Rd_Check          ; Any data in FIFO 0 ?
        CALL    ReadFIFO0               ; Read FIFO 0

        mov     A, USB_STALL            ;
        mov     MP1, A                  ;
        clr     STALL.0                 ;
        mov     A, STALL                ;
        mov     R1, A                   ;

        clr     USBFlag                 ;
        ;CLR     bFLAG_SndFC             ; No Continue Send(ReadNextCnf)
        ;CLR     bFLAG_RsqF              ; Clear re_send Flag
        ;CLR     bCMD_INDEX              ; set Return address to 0
        ;clr     bhas_data_out_previous  ;
        ;clr     bhas_data_out_previous1 ;
        ;clr     bhas_data_out_previous2 ;

        MOV     A,LOW ExitExt           ; Set Defaut Return Address
        MOV     ReturnAddr,A            ; to ReturnAddr
;parsing request command & set command index
        MOV     A,08H                   ; Request structure == 8 bytes ?
        XOR     A,FIFO_SendLen          ;
        SNZ     Z                       ;
        JMP     ToStallPipe0            ; No: data length is invalid
;Parsing command                        ; Yes: Parsing  command
        MOV     A,Setup_Type            ; Type
        AND     A,FIFO_Type             ; Request Type
;!!!!! Need in same page
        SWAP    ACC                     ; Need be change when Setup_Type
        RR      ACC                     ; changed
usb_request_pcl_5:
        ADDM    A,PCL                   ;
        JMP     StandardRequest         ; Standard Request
        JMP     ClassRequest            ; Class Specific Request
        JMP     ToStallPipe0            ; No support Vendor Request
        ;JMP     ToStallPipe0            ; Illegal

ToStallPipe0:
        mov     A, USB_STALL            ;
        mov     MP1, A                  ;
        set     STALL.0                 ;
        mov     A, STALL                ;
        mov     R1, A                   ;
        jmp     ExitExt0                ;
;------------------------------------------------------------------------------
;Host has read data out from FIFO 0
SendFIFO0:
        sz      bsetup_flag             ;
        JMP     ExitExt0                ;

        CALL    FIFO0_Wr_Check          ; examine whether FIFO0 has data?
        clr     r1.@USB_Req             ;
        SZ      Z                       ;
        JMP     ExitExt0                ;

;examine whehter has data output
;Write address to USB_ADDR_WAKE
NoneTag:
        SnZ     bFLAG_SndFC             ; Continue Send (ReadNextCnf)
        JMP     ExitExt0                ;
        snz     bhas_data_out_previous  ;
        JMP     ReadNextCnf             ;
        clr     bhas_data_out_previous  ;
        jmp     ExitExt0                ;
;----------------------------------------------------------------------------
SendFIFOOut:
        MOV     FIFO_SendLen ,A         ; data length to send
        set     bwait_setup             ;
        ;jmp     RequestResponse         ;
RequestResponse:
        CLR     bFLAG_RsqF              ;
        CALL    FIFO0_Wr_Check          ; Ready to response ?
        SNZ     Z                       ;
        JMP     CanResponse

        clr     r1.@USB_Req             ;
        sz      r1.@usb_len0            ;
        JMP     ExitExt0                ; continue to scan keyboard
        sz      r1.@USB_Setup           ;
        jmp     ExitExt0                ; continue to scan keyboard
        jmp     RequestResponse         ;

CanResponse:
        CALL    WriteFIFO0              ;
        mov     A, 00000111B            ;
        orm     A, USBFlag              ;
        ;set     bhas_data_out_previous  ;
        ;set     bhas_data_out_previous1 ;
        ;set     bhas_data_out_previous2 ;
        ;jmp     ExitExt0                ;

ExitExt:
ExitExt0:
        clr     Int_reg.@int0           ;clr pipe0 int flag
        jmp     Exit_of_Ext_start       ;
;----------------------------------------------------------------------------
Check_Pipe1:
AccessFIFO1:
        sz      bCMD_INDEX              ;Reset to 0
        jmp     ExitExt1

        CALL    FIFO1_Wr_Check          ;FIFO0 ready ?
        clr     r1.@USB_Req
        SZ      Z                       ;
        JMP     ExitExt1

        snz     F_MouseChange
        ;jmp     report_pipe1_data
        jmp     ExitExt1

report_pipe1_data:
        ;clr     F_MouseChange
        Call    MoveMouseData

out_fifo1_data:
        CALL    FIFO1_Wr_Check          ;FIFO0 ready ?
        mov     a, MOUSE_STATUS_SIZE    ;
        mov     FIFO_SendLen,a
        CALL    WriteFIFO1

ExitExt1:
        clr     int_reg.@int1
        clr     int_reg_temp.@int1
        JMP     Exit_of_Ext_start

;----------------------------------------------------------------------------
;Check_Pipe2:
;AccessFIFO2:
;        ;sz      bCMD_INDEX              ;Reset to 0
;        ;jmp     ExitExt2
;
;ExitExt2:
;        clr     int_reg.@int2
;        clr     int_reg_temp.@int2
;        JMP     Exit_of_Ext_start
;
;----------------------------------------------------------------------------
;Check_Pipe3:
;AccessFIFO3:
;        clr     int_reg.@int3
;        clr     int_reg_temp.@int3
;        JMP     Exit_of_Ext_start
;----------------------------------------------------------------------------
public  ToStallPipe0
public  SendFIFOOut
public  SendHandShake
public  RequestResponse
public  usb_request_pcl_5
public  ext_start
public  ExitExt
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -