📄 usb_int.asm
字号:
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 + -