?? usb_int.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 + -