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

📄 usb_int2.asm

📁 基于HT82K96E的usb鼠标实现源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
				sz		CMD_ADDR
				set		baddr_state			
                CLR     bFLAG_AdrF  				;have finished address write
                JMP     ExitExt0

;--------------------------------------------------------------------------------------	
AccessFIFO0_cont:							;????
;examine FIFO0 IN, SETUP, OUT Intterupt

				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:				


				set		bFLAG_Setup
CheckSetup:
                MOV     A,USB_MISC          	;MP1 point to Misc. register
                MOV     MP1,A               	;
				nop
				nop
				snz		r1.@USB_Setup
				clr		bFlag_setup

				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
                SNZ     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)
;-----------------------------------------------------------------------------------------
get_cmd_data:
				clr		bsetup_flag
                CALL    FIFO0_Rd_Check      	;Any data in FIFO 0 ?
                CALL    ReadFIFO0           	;Read FIFO 0

				clr		acc
				call	GetPipeBit				;???
				call	clearstall				;clear pipe0 stall status

                CLR     bFLAG_SndFC 			;No Continue Send(ReadNextCnf)
				clr		bFLAG_FIFO_REDY			;ignore address write
				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 GetEnd        	;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
;----------------------------------------------------------------------------

;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
;----------------------------------------------------------------------------
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		Set_SetOutput
				jmp		RedundantData

RedundantData:
                JMP     ExitExt0
Set_SetOutput:
                MOV     A,FIFO_SendLen         	;Is length == 1 ?
                XOR     A,01H                   ;
                SNZ     Z                       ;
                JMP		ToStallPipe0            ;No
                MOV     A,FIFO_TYPE            	;Output report (LED)
                MOV     KB_LED,A                ;
	            CALL    SetLED                  ;Set all keyboard LED
				clr     bCMD_INDEX             	;Reset to 0
                JMP     SendHandShake
;----------------------------------------------------------------------------
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
				set		bhas_data_out_previous
				set		bhas_data_out_previous1
				set		bhas_data_out_previous2
				jmp		ExitExt0

;----------------------------------------------------------------------------
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)
				SZ		bFLAG_FIFO_REDY
				SET		bFLAG_AdrF				;the address response is written to FIFO
				CLR		bFLAG_FIFO_REDY
				set		bwait_setup
                JMP     ExitExt0    			;continue to scan keyboard

;----------------------------------------------------------------------------
SendFIFOOut:
                MOV     FIFO_SendLen ,A    		;data length to send
				set		bwait_setup
				jmp		RequestResponse
;----------------------------------------------------------------------------
ToStallPipe0:
				clr		acc
				call	GetPipeBit
				call	setstall
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

				sz		bKB_KeyUpt
				jmp		report_pipe1_data
				jmp		ExitExt1


report_pipe1_data:
				clr		bKB_KeyUpt				
	            CALL    MoveKeyboardData   	;Update it

out_fifo1_data:
                CALL    FIFO1_Wr_Check       	;FIFO0 ready ?
				mov		a,8
				mov		FIFO_SendLen,a	
	            CALL    WriteFIFO1

				clr		btime_out_KB
				clr		TempKBTime
				clr		tempkbtime_L


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	

public	wr_no
public	setrpt_no
public	kywr_no
END

⌨️ 快捷键说明

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