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

📄 std.asm

📁 HT82J97滑鼠DEMO程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
include		body.inc
include		usbrf1.inc
include		usbfifo.inc

extern		baddr_state		:bit
extern		bRmtWakeup		:bit
extern		bFIFO_Full		:bit
extern		bSend_Continue		:bit
extern		brd_h_table		:bit	;read hi byte of table
extern		bCfgValue 		:bit
extern		bwait_setup		:bit


extern		int_temp1		:byte
extern		int_temp2		:byte

extern		STALL			:byte
extern		CMD_ADDR		:byte
extern		FIFO_Type		:byte
extern		FIFO_Request	:byte
extern		FIFO_wValueH 	:byte
extern		FIFO_wValueL	:byte
extern		FIFO_wIndexH	:byte
extern		FIFO_wIndexL	:byte
extern		FIFO_OUT1		:byte
extern		fifo_out2		:byte
extern		FIFO_SendLen	:byte
extern		FIFO_wLengthH	:byte
extern		FIFO_wLengthL	:byte
extern		TableLength		:byte

extern		lengthh			:byte
extern		lengthl			:byte
extern		FIFO_TBLP		:byte

;---usb_int.asm---
EXTERN		ToStallPipe0:NEAR
EXTERN		RequestResponse:NEAR
EXTERN		SendHandshake:NEAR
EXTERN		SendFIFOOut:NEAR

;---des.asm---
EXTERN		DeviceD:NEAR
EXTERN		ConfigurationD:NEAR
EXTERN		HID_0:NEAR
EXTERN		Entity_0:NEAR
EXTERN		ENTITY_1:NEAR
extern		LangID:NEAR
extern 		ManufactureS:near
extern		ProductS:near

fifo_temp	EQU				int_temp1
temp		equ				int_temp2


STD1		.SECTION at 60h	'code'
;----- Standard request -----------------------------------------------------
StandardRequest:
            mov             a,1
            snz             baddr_state
            mov             a,ENDPOINT_NO
            mov             fifo_temp,a

            MOV     		A,FIFO_Request				;bRequest
            SUB     		A,(STANDARD_REQUEST_NO-3)   ;Over 13 Item ?
            SZ      		C							;
            JMP             ToStallPipe0				;Yes


            MOV     		A,FIFO_Request
			sz				acc.0
			jmp				std_request_pcl_14
            SNZ     		FIFO_Type.@Setup_D			;Device to Host ?		0,6,8
            JMP     		ToStallPipe0				;No: Error
;!!!!! Need in same page
std_request_pcl_14:
            ADDM    		A,PCL
            JMP     		GetStatus				;0			
            JMP     		clearSetFeature			;1
            JMP             ToStallPipe0			;2
            JMP     		clearSetFeature			;3
            JMP             ToStallPipe0			;4
            JMP     		SetAddressC				;5
            JMP     		GetDescriptor			;6
            JMP     		Tostallpipe0			;7
            JMP     		GetConfiguration		;8
            JMP     		SetConfiguration		;9
            ;JMP     		ToStallPipe0 ;GetInterface###        ;A
            ;JMP     		ToStallPipe0 ;SetInterface###        ;B
            ;JMP     		ToStallPipe0 ;SynchFrame###          ;C

;////////////////////////////////////////////////////////////////////////////
;Standard Request
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetAddressC:
            SZ      		FIFO_wValueH          	;Is wValueH == 0 ?
            JMP				ToStallPipe0            ;No:Error
            MOV     		A,FIFO_wValueL        	;Save address to CMD_ADDR
            MOV     		CMD_ADDR,A            	;


			mov				a,USB_SIES
			mov				mp1,a
			mov				a,00000001b
			orm				a,R1

            MOV     		A,USB_ADDR_WAKE     	;MP1 point to Address register
            MOV     		MP1,A               	;

			rla				CMD_ADDR
            AND     		A,0FEH              	;& save it
            SZ      		bRmtWakeup 				;Remote wakeup exist ?
            SET     		acc.0					;Yes:Set remote wakeup flag
            MOV     		R1,A                	;

			sz				CMD_ADDR
			set				baddr_state			
            JMP     		SendHandshake
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clearSetFeature:
            SZ      		FIFO_wValueH          	;wValueH == 0 ?
            JMP				ToStallPipe0            ;No

            SZ      		FIFO_wIndexH          	;wIndexH == 0 ?
            JMP				ToStallPipe0            ;No

            MOV     		A,FIFO_Type           	;Type (Device, Interface or
            AND     		A,Setup_Rev             ;   Endpoint)
			sz				z
			jmp				DeviceStatuscSF			;acc=0		
			xor				a,2				
			snz				z						;acc=2
			jmp				TostallPipe0
;			jmp				EndpointStatusCSF
;-----------------------------------------------------------------------------
EndpointStatusCSF:									;clear stall flag
            SZ      		FIFO_wValueL          	;ENDPOINT_STALL = 0 ?
            JMP				ToStallPipe0            ;No

            MOV     		A,FIFO_wIndexL        	;Get endpoint number
			and				a,01111111b
			SUB				A,FIFO_temp
			SZ				C
			JMP				ToStallPipe0

            MOV     		A,USB_STALL				;MP1 point to Stall register
            MOV     		MP1,A					;
			mov				a,1						;pipe0
			sz				FIFO_wIndexL.0
			mov				a,2						;pipe1
			sz				FIFO_windexL.1			
			mov				a,4						;pipe2

			snz				FIFO_Request.1
				
			jmp				clear_stall
			orm				a,stall
			orm				a,r1
            JMP     		SendHandshake           ;send handshake flag
clear_stall:
			cpl				acc
			andm			a,stall
			andm			a,r1
			jmp				SendHandshake
;-----------------------------------------------------------------------------
DeviceStatusCSF:
			sdza			fifo_wValueL
			jmp				ToStallPipe0 

            SZ      		FIFO_wIndexL          	;Is wIndex == 0 ?
            JMP				ToStallPipe0            ;No

            MOV     		A,USB_ADDR_WAKE     	;Address & Remote wakeup address
            MOV    	 		MP1,A               	;

            SET     		bRmtWakeup   			;enable remote wakeup (flag)
			snz				FIFO_Request.1
			clr				bRmtWakeup
       		;enable remote wakeup           		;Yes
			clr				c
			rlca			cmd_addr
			sz				FIFO_Request.1
			set				acc.0
SetAddrWake:
            MOV     		R1,A                	;
            JMP     		SendHandshake       	;send handshake flag

;****************************************************************************
GetStatus:
            SZ      		FIFO_wIndexH            ;Is wIndex == 0 ?
            JMP     		ToStallPipe0            ;No
            
            MOV     		A,FIFO_Type             ;Type (Device, Interface or
            AND     		A,Setup_Rev             ;   Endpoint)
            MOV     		TEMP,A
;!!!!! Need in same page
            SUB     		A,03H ;04H              ;Over 4 item ?
            SZ      		C                       ;
            JMP     		ToStallPipe0            ;Yes
            MOV     		A,TEMP
get_status_pcl_5:
            ADDM    		A,PCL
            JMP     		DeviceStatusS
            JMP     		InterfaceStatusS
           ;JMP     		EndpointStatusS
;-----------------------------------------------------------------------------
EndpointStatusS:
            MOV     		A,FIFO_wIndexL
            and     		a,01111111b
            SUB     		A,fifo_temp
            SZ      		C
            JMP     		ToStallPiPe0    
    		;Don't care direction, maybe it's neccesary.
				mov		a,00000001b					;pipe0
				sz		FIFO_wIndexL.0
				mov		a,00000010b					;pipe1
				sz		FIFO_wIndexL.1
				mov		a,00000100b					;pipe2
			and				a,STALL
			snz				z
FoundStall:
            mov     		A,01H                   ;mask bits except stall bit
            JMP     		SendEndpointStsS        ;Send endpoint status
;-------------------------------------------------------------------
DeviceStatusS:
			clr				acc
			sz				bRmtwakeup
			set				acc.1	
SendEndpointStsS:
            MOV				FIFO_OUT1,A             ;low byte
            CLR				FIFO_OUT2               ;high byte = 00H
            MOV				A,02H                   ;data length = 2
            JMP				SendFIFOOut             ;Send it
;----------------------------------------------------------------
InterfaceStatusS:
            sz				baddr_state
            jmp				TOstallpipe0
            MOV				A,FIFO_wIndexL
            SUB				A,INTERFACE_NO          ;Over 2 Interface ?
            SZ				C                       ;
            JMP				ToStallPipe0            ;Yes
;No Matter which Interface
            CLR				acc               		;low byte = 00H
            JMP				SendEndpointStsS        ;Send it
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Get string descriptor
std_des_pcl_start:
GetStringDes:
            SZ				FIFO_wIndexH
            JMP				get_other_string
        	;FIFO_wIndexL = Language ID
			sz				fifo_windexl
			jmp				get_other_string
			sz				fifo_wvaluel
			jmp				tostallpipe0

;--------------------------------------------------------------------------------
get_string:		
			mov				a,fifo_wvaluel
			sub				a,3
			sz				c
			jmp				Tostallpipe0

			mov				a,low LangID			;00
			sz				fifo_wvaluel.0
			mov				a,low ManufactureS		;01
			sz				fifo_wvaluel.1
			mov				a,low ProductS			;10

            MOV				TBLP,A                  ;
            TABRDL			TableLength    			;table length from TBLP
            JMP				SendCnf        			;Read Device table and send it

;--------------------------------------------------------------------------------
get_other_string:
			mov				a,fifo_windexH
			xor				a,LAND_ID_H
			snz				z
			jmp				ToStallPipe0

			mov				a,fifo_windexl
			xor				a,LAND_ID_L
			snz				z
			jmp				TOStallpipe0
			jmp				get_string

⌨️ 快捷键说明

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