📄 usb_int.asm
字号:
snz bFLAG_Setup ;
JMP AccessFIFO0_cont2 ; No (data stage(Host to device)
Setup_stage:
clr r1.@USB_Setup ; clear USB setup bit
clr r1.@USB_Len0 ;
clr bwait_setup ;
set bsetup_flag ;
jmp Exitext0 ;
;-------------------------------------------------------------------------------
AccessFIFO0_cont2:
CALL FIFO0_Rd_Check ; Any data in FIFO 0 ?
CLR R1.@USB_Req ; No: Clear request for FIFO0_Rd_Check
SZ Z ;
;JMP HaveDataInFIFO0 ; Yes
;Host read out data from FIFO 0
;Send next transaction data
JMP SendFIFO0 ;
;----------------------------------------------------------------------------
;HaveDataInFIFO0:
;JMP DataStage ; No (data stage(Host to device)
DataStage:
sz bsetup_flag ;
JMP get_cmd_data ;
; CALL FIFO0_Rd_Check ; Any data in FIFO 0 ?
; CALL ReadFIFO0 ; Read FIFO 0
; sz bCMD_INDEX ;
jmp ToStallPipe0 ;Set_SetOutput ;
; jmp RedundantData ;
;
;RedundantData:
JMP ExitExt0 ;
;
;Set_SetOutput:
; JMP ToStallPipe0 ; No
;----------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
SendHandShake:
CALL LEN0_Wr_Check ; FIFO0 ready ?
SnZ Z ;
jmp SendHandShake_Continue ;
clr r1.@USB_Req ;
sz r1.@usb_len0 ;
JMP ExitExt0 ; continue to scan keyboard
sz r1.@USB_Setup ;
jmp ExitExt0 ; continue to scan keyboard
jmp SendHandshake ;
SendHandshake_Continue:
CALL WriteLen0 ; ACK (Write 0 length)
set bwait_setup ;
JMP ExitExt0 ; continue to scan keyboard
;----------------------------------------------------------------------------
extern USBFlag : byte
get_cmd_data:
clr bsetup_flag ;
CALL FIFO0_Rd_Check ; Any data in FIFO 0 ?
CALL ReadFIFO0 ; Read FIFO 0
mov A, USB_STALL ;
mov MP1, A ;
clr STALL.0 ;
mov A, STALL ;
mov R1, A ;
clr USBFlag ;
;CLR bFLAG_SndFC ; No Continue Send(ReadNextCnf)
;CLR bFLAG_RsqF ; Clear re_send Flag
;CLR bCMD_INDEX ; set Return address to 0
;clr bhas_data_out_previous ;
;clr bhas_data_out_previous1 ;
;clr bhas_data_out_previous2 ;
MOV A,LOW ExitExt ; Set Defaut Return Address
MOV ReturnAddr,A ; to ReturnAddr
;parsing request command & set command index
MOV A,08H ; Request structure == 8 bytes ?
XOR A,FIFO_SendLen ;
SNZ Z ;
JMP ToStallPipe0 ; No: data length is invalid
;Parsing command ; Yes: Parsing command
MOV A,Setup_Type ; Type
AND A,FIFO_Type ; Request Type
;!!!!! Need in same page
SWAP ACC ; Need be change when Setup_Type
RR ACC ; changed
usb_request_pcl_5:
ADDM A,PCL ;
JMP StandardRequest ; Standard Request
JMP ClassRequest ; Class Specific Request
JMP ToStallPipe0 ; No support Vendor Request
;JMP ToStallPipe0 ; Illegal
ToStallPipe0:
mov A, USB_STALL ;
mov MP1, A ;
set STALL.0 ;
mov A, STALL ;
mov R1, A ;
jmp ExitExt0 ;
;------------------------------------------------------------------------------
;Host has read data out from FIFO 0
SendFIFO0:
sz bsetup_flag ;
JMP ExitExt0 ;
CALL FIFO0_Wr_Check ; examine whether FIFO0 has data?
clr r1.@USB_Req ;
SZ Z ;
JMP ExitExt0 ;
;examine whehter has data output
;Write address to USB_ADDR_WAKE
NoneTag:
SnZ bFLAG_SndFC ; Continue Send (ReadNextCnf)
JMP ExitExt0 ;
snz bhas_data_out_previous ;
JMP ReadNextCnf ;
clr bhas_data_out_previous ;
jmp ExitExt0 ;
;----------------------------------------------------------------------------
SendFIFOOut:
MOV FIFO_SendLen ,A ; data length to send
set bwait_setup ;
;jmp RequestResponse ;
RequestResponse:
CLR bFLAG_RsqF ;
CALL FIFO0_Wr_Check ; Ready to response ?
SNZ Z ;
JMP CanResponse
clr r1.@USB_Req ;
sz r1.@usb_len0 ;
JMP ExitExt0 ; continue to scan keyboard
sz r1.@USB_Setup ;
jmp ExitExt0 ; continue to scan keyboard
jmp RequestResponse ;
CanResponse:
CALL WriteFIFO0 ;
mov A, 00000111B ;
orm A, USBFlag ;
;set bhas_data_out_previous ;
;set bhas_data_out_previous1 ;
;set bhas_data_out_previous2 ;
;jmp ExitExt0 ;
ExitExt:
ExitExt0:
clr Int_reg.@int0 ;clr pipe0 int flag
jmp Exit_of_Ext_start ;
;----------------------------------------------------------------------------
Check_Pipe1:
AccessFIFO1:
sz bCMD_INDEX ;Reset to 0
jmp ExitExt1
CALL FIFO1_Wr_Check ;FIFO0 ready ?
clr r1.@USB_Req
SZ Z ;
JMP ExitExt1
snz F_MouseChange
;jmp report_pipe1_data
jmp ExitExt1
report_pipe1_data:
;clr F_MouseChange
Call MoveMouseData
out_fifo1_data:
CALL FIFO1_Wr_Check ;FIFO0 ready ?
mov a, MOUSE_STATUS_SIZE ;
mov FIFO_SendLen,a
CALL WriteFIFO1
ExitExt1:
clr int_reg.@int1
clr int_reg_temp.@int1
JMP Exit_of_Ext_start
;----------------------------------------------------------------------------
;Check_Pipe2:
;AccessFIFO2:
; ;sz bCMD_INDEX ;Reset to 0
; ;jmp ExitExt2
;
;ExitExt2:
; clr int_reg.@int2
; clr int_reg_temp.@int2
; JMP Exit_of_Ext_start
;
;----------------------------------------------------------------------------
;Check_Pipe3:
;AccessFIFO3:
; clr int_reg.@int3
; clr int_reg_temp.@int3
; JMP Exit_of_Ext_start
;----------------------------------------------------------------------------
public ToStallPipe0
public SendFIFOOut
public SendHandShake
public RequestResponse
public usb_request_pcl_5
public ext_start
public ExitExt
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -