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

📄 usb_int.asm

📁 Holtek公司的鼠标开发资料源码
💻 ASM
字号:

include         ht82k96e.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          breseume_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          GetPipeBit              :near
extern          clearstall              :near
extern          setstall                :near
extern          GetEnd                  :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

;**************************************************************************
;*                      External INT subroutine
;**************************************************************************
usbExt          .Section         AT 500H '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                  ;

        clr     FIFO_w_c_b              ; use in Bread Board only
;-----------------------------------------------------------------------------------
        snz     suspend_line            ;
        jmp     check_Access_FIFO       ;

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

        sz      resume_line             ;
        jmp     turn_on_usb             ;

        jmp     Exit_of_Ext_start       ;

turn_on_usb:
        set     breseume_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

        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     breseume_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             ;
        mov     Int_reg_temp,a          ;
examine_int123: 
        sz      Int_reg_temp.@int1      ;
        jmp     AccessFIFO1             ;
        sz      Int_reg_temp.@int2      ;
        jmp     AccessFIFO2             ;
        sz      Int_reg_temp.@int3      ;
        jmp     AccessFIFO3             ;
        jmp     Exit_of_Ext_start       ;
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
Check_Pipe0:                            
AccessFIFO0:
        set     chk_usb_reset_event     ; set usb mode flag
        clr     Int_reg.@int0           ; clr pipe0 int flag

        MOV     A,USB_MISC              ; MP1 point to Misc. register
        MOV     MP1,A                   ;
;------------------------------------------------------------------------------------
        sz      bwait_setup             ; (bwait_setup=0,

⌨️ 快捷键说明

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