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

📄 usb_int.asm

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

include         HT82M99E.INC
include         usbFIFO.inc

;"FIFO_type"
@Setup_D                EQU     7       ;direction
@INTERFACE              EQU     0
Setup_Type              EQU     60H     ;Type
Setup_Rev               EQU     1FH     ;Recipient  (Just use 2 bits)
wValueH_Typ             EQU     60H     ;D6..5  Type: 0-Standard, 1-Class, 2-Vendor
wValueH_Dst             EQU     1FH     ;

MOUSE_STATUS_SIZE       EQU     4       ;

extern          bFLAG_SndFC             :bit                    ;has control pipe data to transmitter
extern          bFLAG_Setup             :bit
extern          bFLAG_FIFO_REDY         :bit
extern          bFLAG_RsqF              :bit
extern          bFLAG_AdrF              :bit
extern          bRmtWakeup              :bit 
extern          bhas_data_out_previous  :bit
extern          bhas_data_out_previous1 :bit
extern          bhas_data_out_previous2 :bit
extern          bsetup_flag             :bit                    ;there are setup cmd received   
extern          bCMD_INDEX              :bit
extern          baddr_state             :bit
extern          F_MouseChange           :bit
;extern          btime_out_KB            :bit
extern          bresume_s               :bit
extern          bwait_setup             :bit
extern          fifo_out1               :byte
extern          fifo_out2               :byte
extern          fifo_out3               :byte
extern          fifo_out4               :byte
extern          fifo_out5               :byte
extern          fifo_out6               :byte
extern          fifo_out7               :byte
extern          fifo_out8               :byte
extern          stall                   :byte

extern          FIFO0_Wr_Check          :near
extern          FIFO0_Rd_Check          :near
;extern          FIFO1_Rd_Check          :near
;extern          FIFO2_Rd_Check          :near
;extern          LEN0_Rd_Check           :near
extern          LEN0_Wr_Check           :near
;extern          ReadLen0                :near
extern          WriteLen0               :near
extern          ReadFIFO0               :near
;extern          ReadFIFO1               :near
;extern          ReadFIFO2               :near
extern          WriteFIFO0              :near
extern          FIFO1_Wr_Check          :near
extern          WriteFIFO1              :near
;extern          FIFO2_Wr_Check          :near
;extern          WriteFIFO2              :near
extern          StandardRequest         :near
extern          ClassRequest            :near
extern          ReadNextCnf             :near
extern          MoveMouseData           :near

extern          ReturnAddr              :byte
extern          FIFO_SendLen            :byte
extern          FIFO_Type               :byte
;extern          TempKBTime              :byte
;extern          TempKBTime_L            :byte
extern          CMD_ADDR                :byte
extern          int_temp1               :byte

FIFO_addr       equ             int_temp1

usbint_var      .section        'data'
isr_usb_acc     db              ?
isr_usb_status  db              ?
isr_usb_mp1     db              ?
isr_usb_mp0     db              ?
isr_usb_tblp    db              ?
int_reg_temp    db              ?                               ;for store USB pipe int register


public	isr_usb_acc
public	isr_usb_status

;**************************************************************************
;*                      External INT subroutine
;**************************************************************************
;usbExt          .Section         AT 500H 'code'
usbExt          .Section         'code'
;External interrupt service routine
EXT_START:
        ;clr     wdt                     ;
;        MOV     ISR_USB_ACC,A           ; Save ACC
;        MOV     A,STATUS                ; Save STATUS
;        MOV     isr_usb_status,A        ;

        MOV     A,USB_REG_BANK          ; Set bank pointer to USB control
        MOV     BP,A                    ; register bank

        MOV     A,MP1                   ;
        MOV     isr_usb_mp1,A           ;
        mov     a,mp0                   ;
        mov     isr_USB_mp0,a           ;
        mov     a,tblp                  ;
        mov     isr_usb_tblp,a          ;

        ;clr     intc.1                  ;
        ;set     intc.0                  ;
;-----------------------------------------------------------------------------------
        snz     suspend_line            ;
        jmp     check_Access_FIFO       ;

        mov     a,11110000b             ; clear Int_reg within suspend state
        andm    a,Int_reg               ;

        snz     resume_line             ;
        ;jmp     turn_on_usb             ;
        jmp     Exit_of_Ext_start       ;

turn_on_usb:
        set     bresume_s               ;
        set     on_usb_clk              ; turn on USB CLK
;        clr     regulator_off           ;
;-----------------------------------------------------------------------------------
;ExitExt:
Exit_of_Ext_start:
        mov     a,isr_usb_tblp          ;
        mov     tblp,a                  ;
        mov     a,isr_usb_mp0           ;
        mov     mp0,a                   ;
        MOV     A,isr_usb_mp1           ;
        MOV     MP1,A                   ;

        ;MOV     A,0                     ; Set bank pointer to UC
        ;MOV     BP,A                    ; register bank
        clr     BP                      ;

        MOV     A,Isr_usb_status        ; Restore STATUS
        MOV     STATUS,A                ;
        MOV     A,isr_usb_acc           ; Restore ACC
        ;clr     intc.0                  ;
        ;set     intc.1                  ;
        RETI                            ;
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
check_Access_FIFO:
        clr     bresume_s               ;
        set     on_usb_clk              ; turn on USB CLK
        clr     regulator_off           ;

        sz      Int_reg.@int0           ;
        jmp     AccessFIFO0             ;

        ;other pipe except pipe0 interrupt
        mov     a,Int_reg               ;
        sz      Int_reg_temp            ;
        jmp     examine_int123          ;

        ;and     a,00001110b             ;
        and     a,00000010b             ;
        mov     Int_reg_temp,a          ;
examine_int123: 
        sz      Int_reg_temp.@int1      ;
        jmp     AccessFIFO1             ;

        ;nop;sz      Int_reg_temp.@int2      ;
        ;nop;jmp     AccessFIFO2             ;
        ;nop;sz      Int_reg_temp.@int3      ;
        ;nop;jmp     AccessFIFO3             ;
        jmp     Exit_of_Ext_start       ;
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
Check_Pipe0:                            
AccessFIFO0:
extern  busb_event:bit
        set     busb_event              ; set usb mode flag
        set     wdts.7
        clr     Int_reg.@int0           ; clr pipe0 int flag

        MOV     A,USB_MISC              ; MP1 point to Misc. register
        MOV     MP1,A                   ;
;------------------------------------------------------------------------------------
        sz      bwait_setup             ;
        jmp     wait_next_setup         ;

        snz     r1.@usb_len0            ;
        jmp     AccessFIFO0_cont        ; OUT, IN
;------------------------------------------------------------------------------------
wait_next_setup:
;        MOV     A,USB_MISC              ; MP1 point to Misc. register
;        MOV     MP1,A                   ;
;        jmp     $+1
        snz     r1.@USB_Setup           ;
        ;jmp     AccessFIFO0_cont        ; SETUP
        JMP     ExitExt0                ;

;-------------------------------------------------------------------------------------- 
AccessFIFO0_cont:
;examine FIFO0 IN, SETUP, OUT Interrupt
        snz     bhas_data_out_previous1 ;
        jmp     AccessFIFO0_cont1       ;
        clr     bhas_data_out_previous1 ;
        jmp     ExitExt0                ;
;-------------------------------------------------------------------------------
AccessFIFO0_cont1:                              
        snz     bhas_data_out_previous2 ;
        jmp     AccessFIFO0_cont11      ;
        clr     bhas_data_out_previous2 ;
        jmp     ExitExt0                ;

;-------------------------------------------------------------------------------
AccessFIFO0_cont11:                             
CheckSetup:
        set     bFLAG_Setup             ;
        snz     r1.@USB_Setup           ;
        clr     bFLAG_Setup             ;

⌨️ 快捷键说明

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