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

📄 usb_int.asm

📁 HT82J97滑鼠DEMO程序
💻 ASM
字号:
include		body.inc
include     usbrf1.inc
include     usbFIFO.inc

extern      FIFO_SendLen    :byte
extern      FIFO_Type       :byte
extern      stall           :byte

extern      bSend_Continue  :bit        ;has control pipe data to transmitter
extern      bFIFO_Full      :bit

extern      nCmdIndex       :byte       ;set output or set feature
extern      bsetup_flag     :bit        ;there are setup cmd received   
extern      bDataUpdate_IN     :bit
extern      bDataUpdate_OUT     :bit
extern      bwait_setup     :bit

extern      FIFO0_Wr_Check  :near       ;usblib1.asm
extern      FIFO0_Rd_Check  :near       ;usblib1.asm
extern      FIFO1_Wr_Check  :near       ;usblib1.asm
extern      FIFO2_Wr_Check  :near       ;usblib1.asm
EXTERN      FIFO2_Rd_Check  :NEAR

extern      LEN0_Wr_Check   :near       ;usblib1.asm
extern      WriteLen0       :near       ;usblib1.asm
extern      ReadFIFO0       :near       ;usblib1.asm
extern      WriteFIFO0      :near       ;usblib1.asm
extern      WriteFIFO1      :near       ;usblib1.asm
extern      WriteFIFO2      :near       ;usblib1.asm
extern      ReadFIFO2       :near

extern      StandardRequest :near       ;std6.asm
extern      ClassRequest    :near       ;std6.asm
extern      ReadNextCnf     :near       ;std6.asm
extern      FromUSB         :near       ;serial.asm
extern      ToUSB           :near       ;serial.asm
EXTERN      FromUSB1        :NEAR

;wait 3 continuous IN
extern      bhas_data_out_previous  :bit
extern      bhas_data_out_previous1 :bit
extern      bhas_data_out_previous2 :bit

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
;**************************************************************************

Ext         .Section at 350h '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,11111100b             ;clear Int_reg within suspend state
            andm            a,Int_reg

            sz              resume_line
            jmp             turn_on_usb

;turn_off_usb:
            jmp             Exit_of_Ext_start
turn_on_usb:
            set             on_usb_clk              ;turn on USB CLK    
;-----------------------------------------------------------------------------------
;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   
            clr             BP                      ;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:
            set             on_usb_clk              ;turn on USB CLK    
            clr             regulator_off           

            sz              Int_reg.@int0           
            jmp             AccessFIFO0
            sz              Int_reg.@int1               
            jmp             AccessFIFO1
            jmp             Exit_of_Ext_start
;-----------------------------------------------------------------------------------
Check_Pipe0:                
AccessFIFO0:
            set             chk_usb_reset_event     ;set usb mode flag; special use for USB+PS2
            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         ; wait_setup=1;

            snz             r1.@usb_len0            ; (wait_setup=0) 
            jmp             wait_3in             	; out, in
;------------------------------------------------------------------------------------
wait_next_setup:                                    ; wait_setup=1
            snz             r1.@USB_Setup           ; packet size=0(usb_len==0)
            JMP             ExitExt0
;-------------------------------------------------------------------------------------- 
;Host has read data out from FIFO 0
wait_3in:
                snz     bhas_data_out_previous1		;bhas_data_out_previousl=0,

⌨️ 快捷键说明

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