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