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

📄 usblib2.asm

📁 82K96E/82M99E开发的USB键盘接收端DEMO程序源码
💻 ASM
字号:
include		ht82k96e.inc
;include    	usbrf.inc
include		usbfifo.inc



extern		stall			:byte
extern		FIFO_Type		:byte
extern		FIFO_OUT1 		:byte
extern		int_temp1		:byte
extern		int_temp2		:byte
extern		fifo_sendlen	:byte
extern		bhas_len0		:bit
;extern		bFLAG_FIFO_REDY		:bit
;extern		bFLAG_AdrF		:bit
extern		bRmtWakeup		:bit
extern		baddr_state		:bit

extern		CMD_ADDR		:byte

FIFO_temp		equ			int_temp1
fifo_no			equ			int_temp2
FIFO_ADDR		equ			int_temp1



USBlib		.Section	AT 280H 'code'   ;AT	USBlib_ADDRESS
;----------------------------------------------------------------------------
;FIFO 0 ready to read ?

FIFO0_Rd_Check:
				mov		a,00000000b
				jmp		FIFO_Check

FIFO1_RD_check:
				mov		a,00001000b
				jmp		FIFO_Check
FIFO2_RD_check:
				mov		a,00010000b
				jmp		FIFO_Check
FIFO3_RD_check:
				mov		a,00011000b
				jmp		FIFO_Check

				
;----------------------------------------------------------------------------
;Len 0 ready to write ?
LEN0_Wr_Check:
;FIFO 0 ready to write ?
FIFO0_Wr_Check:
				mov		a,00000010b
				jmp		FIFO_Check
FIFO1_Wr_check:
				mov		a,00001010b
				jmp		FIFO_Check
FIFO2_Wr_check:
				mov		a,00010010b
				jmp		FIFO_Check
FIFO3_Wr_check:
				mov		a,00011010b
				jmp		FIFO_Check
				
FIFO_Check:
				mov		FIFO_temp,a
                MOV     A,USB_MISC
                MOV     MP1,A
				mov		a,r1
				and		a,11100000b
				or		a,fifo_temp
				mov		r1,a
				call	wait_4us
                SET     R1.@USB_Req         	;Set request
				call	wait_4us
				call	wait_4us
                MOV     A,(01H SHL @USB_Ready) 	;access ready flag
Check:
				call	wait_28us
                AND     A,R1        			;Z=0:ready/1:not ready
                RET

;----------------------------------------------------------------------------
;----BEGIN (Read FIFO)
ReadFIFO0:
                MOV     A,USB_FIFO0
                JMP     ReadFIFO
ReadFIFO1:
                MOV     A,USB_FIFO1
				JMP		ReadFIFO	
ReadFIFO2:
                MOV     A,USB_FIFO2
				JMP		ReadFIFO	
ReadFIFO3:
                MOV     A,USB_FIFO3
				JMP		ReadFIFO	

ReadFIFO:
                MOV     FIFO_NO,A             	;FIFO NO.
                CLR     FIFO_SendLen            ;Initial length to 0
                MOV     A,OFFSET FIFO_Type      ;set input FIFO buffer pointer
                MOV     MP0,A                   ;
ReadFIFOLoop:
                MOV     A,FIFO_NO              	;FIFO NO.
                MOV     MP1,A                   ;
                MOV     A,R1                    ;Read FIFO data
				nop
                MOV     R0,A                    ;
                INC     FIFO_SendLen            ;Getting data length++
                INC     MP0                     ;Update to next pointer
                MOV     A,FIFO_SIZE             ;FIFO full ?
                XOR     A,FIFO_SendLen          ;
                SZ      Z                       ;
                JMP     E1ND_Request             ;Yes
                MOV     A,USB_MISC              ;Check ready ?
                MOV     MP1,A                   ;
				call	wait_28us
                SZ      R1.@USB_Ready           ;
                JMP     ReadFIFOLoop            ;Yes
                JMP     E1ND_Request             ;No Exit for not 8 bytes data
;----END (Read FIFO)

;----------------------------------------------------------------------------
;----BEGIN (Write FIFO)
;Write FIFO_OUT1 Data to FIFO Buffer 
WriteFIFO0:
                MOV     A,USB_FIFO0
                JMP     WriteFIFO
WriteFIFO1:
                MOV     A,USB_FIFO1
				JMP		WriteFIFO
WriteFIFO2:
                MOV     A,USB_FIFO2
				JMP		WriteFIFO
WriteFIFO3:
                MOV     A,USB_FIFO3
				JMP		WriteFIFO

WriteFIFO:
                MOV     FIFO_NO,A             	;FIFO NO.
                MOV     A,OFFSET FIFO_OUT1      ;set output FIFO buffer pointer
                MOV     MP0,A                   ;
WriteFIFOLoop:
                SZ      FIFO_SendLen           	;Any data to write ?
                JMP     WriteFIFOTag            ;Yes
                JMP     EndWrite                ;No
WriteFIFOTag:
                MOV     A,FIFO_NO              	;FIFO NO.
                MOV     MP1,A                   ;
				
				SET		FIFO_w_c_b
                MOV     A,R0                    ;Write data to FIFO
                MOV     R1,A                    ;
				CLR		FIFO_w_c_b				

                DEC     FIFO_SendLen           	;Getting data length++
                INC     MP0                     ;Update to next pointer
                MOV     A,USB_MISC              ;End of FIFO ?
                MOV     MP1,A                   ;
				call	wait_28us
                SZ      R1.@USB_Ready           ;
                JMP     WriteFIFOLoop           ;No
				jmp		EndWrite
;------------------------------------------------------------------------
WriteLen0:
EndWrite:
;----------------------------------------------------------------------------
;----BEGIN (End request)
E1ND_Request:
                MOV     A,USB_MISC
                MOV     MP1,A
                MOV     A,(01H SHL @USB_Tx) ;Change Tx state
				clr		intc.0
                XORM    A,R1                ;
				call	wait_4us
                CLR     R1.@USB_Req         ;End request
				set		intc.0
                RET
;----------------------------------------------------------------------------
;----BEGIN (Clear FIFO)
ClearFIFO1:
				set		r1.@USB_Clear
				clr		r1.@USB_Tx
				call	wait_4us
                CLR     R1.@USB_Clear       ;Disable Clear
                CLR     R1.@USB_Req         ;End request
                RET




;----END (Clear FIFO)
wait_28us:
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
				jmp		$+1
wait_4us:
				ret




;----------------------------------------------------------------------------
;----BEGIN (Get pipe bit)
;Input : ACC pipe number
;Output: ACC pip bit (D0:pipe 0, D1:pipe 1...)
GetPipeBit:
                INC     ACC
                MOV     FIFO_TEMP,A
                MOV     A,80H
GetPipeBitLoop:
                RL      ACC
                SDZ     FIFO_TEMP 
                JMP     GetPipeBitLoop
                RET
;----END (Get pipe bit)

;----------------------------------------------------------------------------
;----BEGIN (Set Stall)
;Input : ACC = Pipe number
SetStall:
                MOV     FIFO_TEMP ,A   	;
                MOV     A,USB_STALL     ;MP1 point to Stall register (Read Only)
                MOV     MP1,A           ;
                MOV     A,FIFO_TEMP 
                OR      A,STALL        	;Set stall bit
                JMP     SetStallTag
;----END (Set Stall)


;----------------------------------------------------------------------------
;----BEGIN (Clear Stall)
;Input : ACC = Pipe number
ClearStall:
                MOV     FIFO_TEMP,A         ;
                MOV     A,USB_STALL         ;MP1 point to Stall register
                MOV     MP1,A               ;
                MOV     A,FIFO_TEMP 
                CPL     ACC                 ;Clear stall bit
                AND     A,STALL            	;
SetStallTag:
                MOV     STALL,A       		;Update Satll buffer
                MOV     R1,A            	;Update Stall register
                RET
;----END (Clear Sta


;public	LEN0_Rd_Check
public	LEN0_Wr_Check
public	FIFO0_Rd_Check
;public	FIFO0_Rd_Check1
public	FIFO1_Rd_Check
public	FIFO2_Rd_Check
public	FIFO3_Rd_Check
public	FIFO0_Wr_Check
public	FIFO1_Wr_Check
public	FIFO2_Wr_Check
public	FIFO3_Wr_Check
;public	ReadLen0
public	ReadFIFO0
public	ReadFIFO1
public	ReadFIFO2
public	ReadFIFO3
public	WriteLen0
public	WriteFIFO0
public	WriteFIFO1
public	WriteFIFO2
;public	ClearFIFO0
public	ClearFIFO1
;public	ClearFIFO2
;public	CheckSetup
;public	CheckPipe
public	GetPipeBit
public	SetStall
public	ClearStall
;public	SetAddress
;public	SetRemoteFun
;public	END_Request
END

⌨️ 快捷键说明

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